1

好吧,我真的迷失了这个。我创建了一个 wcf 服务,我将 xml 发布到该服务,这些服务对数据进行了处理。一切都很好,除非我将打开的 xml 标记放在我的 xml 的最顶部。当我在调试模式下查看所有内容时,数据为空。

我在 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>

我可以通过将订单添加到数据成员来解决这个问题,当标签在 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 切换到另一个序列化引擎。XmlSerializer。

一些对我有帮助的信息的链接: WCF 禁用反序列化顺序敏感度 http://msdn.microsoft.com/en-us/library/ms732038.aspx

于 2012-08-03T22:29:41.380 回答