【问题标题】:Is it possible to add properties to a serialized collection?是否可以将属性添加到序列化集合?
【发布时间】:2014-10-08 07:03:51
【问题描述】:

有没有办法向序列化集合子类添加元素和属性?

这是一个示例,给定以下类:

[XmlRoot("MyTs")]
public class MyCollection : HashSet<MyT>
{
    [XmlAttribute]
    public string Name { get; set; }

    //[XmlElement]
    public string Description { get; set; }
}

序列化的 XML 不包含额外的元素和属性。有没有办法添加它,仍然使用序列化类作为HashSet子类?

对于上面的例子,我想要以下 XML:

<?xml>
<MyTs name="name">
  <MyT/>
  <MyT/>
  <MyT/>
  <Description>Some long verbal rubbish</Description>
</MyTs>

【问题讨论】:

    标签: c# xml serialization collections xml-serialization


    【解决方案1】:

    对于XmlSerializer,有些东西是要么 一个集合xor 一个数据对象。两者都不是。

    但是,您可以这样做:

    [XmlRoot("MyTs")]
    public class MyRoot
    {
        [XmlAttribute]
        public string Name { get; set; }
    
        //[XmlElement]
        public string Description { get; set; }
    
        private readonly HashSet<MyT> items = new HashSet<MyT>();
        [XmlElement("MyT")] 
        public HashSet<MyT> Items {get { return items;}}
    }
    

    这将具有您想要的 xml 结构。

    【讨论】:

    • 我猜 xor 是一个错字,你的意思是 or 不是吗?
    • @SriramSakthivel 这是故意的;我正在消除“或”的随意会话使用(它往往是排他性的)与“或”的编程/数学使用(它是包容性的)。这个“或”是排他性的:又名“异或”
    最近更新 更多