1

わかりました、私はこれで本当に迷っています。XMLを投稿するwcfサービスを作成しましたが、サービスはデータで何かを行います。xml の一番上に開始 xml タグを配置する場合を除いて、すべてがうまく機能します。デバッグ モードですべてを表示すると、データが null として表示されます。

wcf の私の C# コードは次のようなものです。

public interface ITest
{
    [OperationContract]
    void DoWork();

    [OperationContract]
    [WebDispatchFormatter]
    [WebInvoke(UriTemplate = "MyTest", Method = "*")]
    void MyTest(PassedIn request);
}

[Serializable]
[DataContract(Namespace = "", Name = "")]
public class PassedIn
{
    public PassedIn() { }

    [DataMember]
    public string firstname {get; set;}
    [DataMember]
    public string lastname {get; set;}
    [DataMember]
    public string email {get; set;}
}

さまざまな xml 投稿を次に示します。

<mypost>
    <firstname>test</firstname>
    <lastname>foo</lastname>
    <email>test@bar.com</email>
</mypost>
<?xml version="1.0"?>
<mypost>
    <firstname>test</firstname>
    <lastname>foo</lastname>
    <email>test@bar.com</email>
</mypost>

次のように datamember に順序を追加することで、タグが xml にあるときにデータが失われない場所でこれを修正できました。

public class PassedIn
{
    public PassedIn() { }

    [DataMember (order=1)]
    public string firstname {get; set;}
    [DataMember  (order=2)]
    public string lastname {get; set;}
    [DataMember  (order=3)]
    public string email {get; set;}
}  

しかし、今では逆効果です。「?xml バージョン」タグがない場合、データは null として送信されます。

誰かがこれに遭遇しましたか?本当にいくつかのアドバイスを使用できます。ありがとう

4

1 に答える 1

1

私はそれを理解しました..DataContractSerializerを使用する場合、順序は重要ですが、順序を指定しない場合、デフォルトでは順序はアルファベット順であるため、一部のデータが設定され、他のデータは設定されませんでした。

順序が問題になりたくなかったので、DataContractSerializer から別のシリアル化エンジンに切り替える必要がありました。Xmlシリアライザー。

私を助けたいくつかの情報へのリンク: WCF Disable Deserialization Order Sensitivity http://msdn.microsoft.com/en-us/library/ms732038.aspx

于 2012-08-03T22:29:41.380 に答える