【问题标题】:How do I add an XML attribute using DataContract如何使用 DataContract 添加 XML 属性
【发布时间】: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 元素添加属性?

提前致谢。

【问题讨论】:

    标签: c# .net serialization datacontract


    【解决方案1】:

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

    【讨论】:

    【解决方案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 也没有输入序列化
      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多