【问题标题】:WCF XML SerializationWCF XML 序列化
【发布时间】:2009-04-07 21:36:34
【问题描述】:

在 2.0 序列化时代,我可以创建一个对象的序列化版本,这将导致以下示例:

<transactionMessage messageDate="1/1/2001 11:00PM" messageId="abc123">
    <transaction property1="Value" property2="value2" />
</transactionMessage>

我将使用 Serializable() 属性执行此操作,然后将 XmlElement 属性附加到我的项目。但是,当我使用 DataContract/DataMember 属性时,我会得到如下所示的内容:

<transactionMessage>
  <messageDate>1/1/2001 11:00PM</messageDate>
  <messageId>abc123</mesageId>
  <transaction>
    <property1>Value</property1>
    <property2>Valu2</property2>
  </transaction>
</transactionMessage>

通常我不会真正关心幕后生成的 XML,但该系统将与多个外部客户端进行交互,这些客户端已经与不同的系统(基于 2.0 序列化风格)进行了通信,并且我想保留结构类似,但增加了 WCF 的增强功能。

如何告诉 DataMember 属性本质上使格式更像第一个示例,其中包含属性而不是所有内容的元素?

【问题讨论】:

    标签: xml wcf serialization


    【解决方案1】:

    DataContract 序列化程序针对速度进行了优化,似乎设计者认为 XML 节点上的支持属性不适合他们的速度要求。

    DataContract 序列化程序不支持属性 - 如果您需要这些,请改用古老的 XmlSerializer。

    马克

    【讨论】:

    • 听起来不错。我相信互动的人会抱怨一点,但他们可以克服它!感谢您的帮助。
    【解决方案2】:

    我没有使用 WCF,但尝试添加

    [XmlAttribute]
    

    在你的 messageDate 和 messageID 属性之前。

    【讨论】:

      【解决方案3】:

      好吧,经过多一点搜索,根据这个似乎是不可能的:

      XMLSerializer vs DataContractSerializer

      很遗憾,MS 不会让您选择更改它。

      【讨论】:

        猜你喜欢
        • 2015-03-29
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 2020-11-18
        • 1970-01-01
        相关资源
        最近更新 更多