【问题标题】:How to serialize class members as attributes to xml in C#如何在C#中将类成员序列化为xml的属性
【发布时间】:2010-10-13 10:59:25
【问题描述】:

我正在尝试将我的对象序列化为 xml。序列化器看似将所有数据成员序列化为子项,但我想将所有成员序列化为属性,而不是子项。

这是一个代码示例:

[DataContract]
public class MyDataClass
{
  [DataMember]
  int foo = 24;
  [DataMember]
  string bar = "brabrabra";
} 

当我使用 DataContractSerializer 时,这将被序列化为以下 xml:

<MyDataClass xmlns="..." xmlns:i="...">
  <foo>24</foo>
  <bar>brabrabra</bar>
</MyDataClass>

但是,我想以某种方式将其序列化为以下 xml:

<MyDataClass xmlns="..." xmlns:i="..." foo="24" bar="brabrabra" />

有没有办法像这样序列化?或者,我应该编写自己的序列化程序来实现它吗? 作为参考,我在此示例中使用 DataContract 序列化程序,但如果有更好的,我可以将其更改为普通 XmlSerializer 或另一个。

希望有人知道这一点。

阿基

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

    看看XMLAttribute。但仅适用于 XMLSerializer。

    【讨论】:

      【解决方案2】:

      您可以通过以下方式使用简单的 XmlSerializer 来实现此目的:

      [Serializable]
      public class SerializationTest2
      {
          [XmlAttributeAttribute]
          public string MemberA { get; set; }
      }
      
      [Test]
      public void TestSerialization()
      {
          var d2 = new SerializationTest2();
          d2.MemberA = "test";
          new XmlSerializer(typeof(SerializationTest2))
              .Serialize(File.OpenWrite(@"c:\temp\ser2.xml"), d2);
      }
      

      【讨论】:

      • 完美!感谢您的准确回答。 =D
      【解决方案3】:

      [XmlAttribute] 放在foobar 声明之前。

      伟大的参考:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

      【讨论】:

      • 感谢您的快速回答和参考。 =)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      相关资源
      最近更新 更多