【问题标题】:Data is lost when xml version tag is added to xml when posting to wcf发布到 wcf 时将 xml 版本标记添加到 xml 时数据丢失
【发布时间】:2012-07-27 19:22:05
【问题描述】:

好吧,我真的迷失了这个。我创建了一个 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。

有人遇到过这种情况吗?真的可以使用一些建议。谢谢

【问题讨论】:

  • 不知道这是否重要,但您是否尝试过使用 [DataContract] 属性装饰 PassedIn?
  • 是的,我把那部分放在外面了……它已经在里面了。我刚刚在那里编辑了我的代码。
  • 如果你能控制两端,看看ServiceStack

标签: c# xml wcf serialization


【解决方案1】:

我想通了..在使用 DataContractSerializer 时,顺序很重要,但如果您不指定顺序,默认情况下顺序是按字母顺序排列的,这就是为什么某些数据被设置而其他数据不被设置的原因。

我真的不想让订单变得重要,所以我不得不从 DataContractSerializer 切换到另一个序列化引擎。 XmlSerializer。

一些对我有帮助的信息的链接: WCF Disable Deserialization Order Sensitivity http://msdn.microsoft.com/en-us/library/ms732038.aspx

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多