【问题标题】:Inject XML attribute into serialization将 XML 属性注入序列化
【发布时间】:2009-08-06 00:11:06
【问题描述】:

我正在尝试序列化一个数组并希望将一个属性附加到该数组。比如我想要的输出是:

<ArrayOfThingie version="1.0">
  <Thingie>
    <name>one</name>
  </Thingie>
  <Thingie>
    <name>two</name>
  </Thingie>
</ArrayOfThingie>

这只是一个原始数组,所以我不想为数组本身定义属性,只是在它的序列化中。有没有办法在序列化中注入属性?

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    您可以为 ArrayOfThingie 创建一个包装器,仅用于序列化:

        public class Thingie
        {
            [XmlElement("name")]
            public string Name { get; set; }
        }
    
        [XmlRoot]
        public class ArrayOfThingie
        {
            [XmlAttribute("version")]
            public string Version { get; set; }
            [XmlElement("Thingie")]
            public Thingie[] Thingies { get; set; }
        }
    
        static void Main(string[] args)
        {
            Thingie[] thingies = new[] { new Thingie { Name = "one" }, new Thingie { Name = "two" } };
    
            ArrayOfThingie at = new ArrayOfThingie { Thingies = thingies, Version = "1.0" };
            XmlSerializer serializer = new XmlSerializer(typeof(ArrayOfThingie));
            StringWriter writer = new StringWriter();
            serializer.Serialize(writer, at);
    
            Console.WriteLine(writer.ToString());
        }
    

    【讨论】:

    • 不错。我一直在为 XmlSerializer 命名空间工作。那有一堆方法几乎可以做我想要的,但不完全是。这要简单得多。谢谢!
    【解决方案2】:

    有点技巧是将数组序列化为 XML,然后在保存之前修改序列化的 XML。假设 Array 是类的属性,更简洁的方法是 Add an attribute to a serialized XML node

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多