如何使用 DataContract 添加 XML 属性

Posted

技术标签:

【中文标题】如何使用 DataContract 添加 XML 属性【英文标题】:How do I add an XML attribute using DataContract 【发布时间】:2010-12-11 06:27:08 【问题描述】:

我正在序列化一个简单的类。

 [DataContract(Name = "Test", Namespace = "")]
 public class Test
 
    [DataMember(Order = 0, Name = "Text")]
    public string Text  get; set; 

    public Test() 
 

这会踢出以下 XML:

<Test>
   <Text>Text here</Text>
</Test>

我想要的是:

<Test>
   <Text type="MyType">Text here</Text>
</Test>

如何为 XML 元素添加属性?

提前致谢。

【问题讨论】:

【参考方案1】:

您不能将属性添加到 DataContract。您要么必须使用实现 ISerializable 的类,要么使用 .Net XmlSerializer。

【讨论】:

根据执行序列化的系统,可以执行 OP 要求的操作 - 请参阅:***.com/questions/4858798/…【参考方案2】:

不完全是答案,但您可以尝试实现 IXmlSerializable 以完全控制输出 xml 格式。

【讨论】:

【参考方案3】:

我可以通过声明一个其中定义了属性的 XElement 来实现这一点。例如:

public XElement Text  get; set;

【讨论】:

代码[DataMember(Name = "test")] public XElement test = new XElement("Root", new List&lt;string&gt;() "1", "2", "3" ); 产生&lt;test&gt; &lt;Root xmlns=""&gt;123&lt;/Root&gt; &lt;/test&gt; 这可能不是quenstioner 的本意【参考方案4】:

用[XMLAttribute]添加类型属性,用[XmlText]添加元素值。

public class Test

    public text Text;

    public Test()
    
        Text = new text();
    

    [DataContract(Name = "Test", Namespace = "")]
    public class text
    
        [XmlText]
        public string Text  get; set; 
        [XmlAttribute]
        public string type  get; set; 
    

【讨论】:

我试过了,没有得到 Text 也没有输入序列化

以上是关于如何使用 DataContract 添加 XML 属性的主要内容,如果未能解决你的问题,请参考以下文章

WCF -Rest- DataContract:反序列化 XML 包装的响应

DataContract XML 序列化和 XML 属性

DataContract,默认 DataMember 值

如何在 WCF 中将接口标记为 DataContract

有没有办法从 DataContract 导出 XSD 架构

如何找出类是不是具有 DataContract 属性?