2011-10-05 5 views
5

これは私が一日中ナッツを動かしています。私はまだ変更を加えていないので、これは私が昨日意図した方法で動作していると誓っています。私はまた、次のタイプが定義されている多態性データコントラクトを持つREST - 逆シリアル化が失敗する

[ServiceContract] 
public interface IPhoneFeaturesManagementHost 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/accounts/{accountNumber}/phoneNumbers/{phoneNumber}/features/{featureType}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] 
    void UpdateFeatureStatus(string accountNumber, string phoneNumber, string featureType, FeatureUpdateRequest updateRequest); 
} 

[DataContract] 
[KnownType(typeof(One900FeatureUpdateRequest))] 
public abstract class FeatureUpdateRequest 
{ 
    [DataMember] 
    public FeatureStatus Status { get; set; } 

    [DataMember] 
    public DateTime EffectiveDate { get; set; } 

    public string AccountNumber { get; set; } 
    public string PhoneNumber { get; set; } 
    public string UserId { get; set; } 
    public DateTime Timestamp { get; set; } 

    public override string ToString() 
    { 
     return String.Format("Status: {0}, Effective Date: {1}", Status, EffectiveDate); 
    } 
} 

[DataContract] 
public class One900FeatureUpdateRequest : FeatureUpdateRequest 
{ 
    [DataMember] 
    public bool PerformSwitchUpdate { get; set; } 
} 

昨日は私がのPOSTデータを提出することができました誓う

私は、次の契約で定義されたWCF 4 RESTサービスを持っていますこのフォーム:

<One900FeatureUpdateRequest> 
    <EffectiveDate>1999-05-31T11:20:00</EffectiveDate> 
    <Status>Enabled</Status> 
    <PerformSwitchUpdate>true</PerformSwitchUpdate> 
</One900FeatureUpdateRequest> 

今日、XMLの同じバッチがHTTP 400エラーの原因となっています。メッセージ次:

Unable to deserialize XML body with root name 'One900FeatureUpdateRequest' and root namespace '' (for operation 'UpdateFeatureStatus' and contract ('IPhoneFeaturesManagementHost', 'http://tempuri.org/')) using DataContractSerializer. Ensure that the type corresponding to the XML is added to the known types collection of the service. 

今日動作しているようにのみXMLは以下の通りです、と私は本当に私の子供のDataContractのサブタイプを記述するための名前空間に加えて属性を追加することの必要性を嫌います。

<FeatureUpdateRequest i:type="One900FeatureUpdateRequest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project.Services.Host"> 
    <EffectiveDate>1999-05-31T11:20:00</EffectiveDate> 
    <Status>Enabled</Status> 
    <PerformSwitchUpdate>true</PerformSwitchUpdate> 
</FeatureUpdateRequest> 

誰もが私が触れたか、私は戻って、直列化復元のための先行シンプルなXML形式に取得するために変更する必要があるかもしれないものについての任意のアイデアを持っていますか?

ご協力いただければ幸いです。ありがとう!

+0

抽象的なキーを削除してみてください –

+0

これを試してみましたが、残念ながら違いはありませんでした。しかし、ありがとう! –

答えて

1

DataContractSerializerでこれを行う方法が見つかりませんでした。そのため、古いXmlSerializerに切り替えたので、XML形式を直接制御できるようになりました。これはうまくいくように見えました。

関連する問題