具有动态元素名称的序列化和泛型列表

本文关键字:序列化 泛型 列表 动态 元素 | 更新日期: 2023-09-27 18:24:49

我想知道在序列化以下类时是否可以更改泛型列表的元素名称。

[Serializable, XmlRoot(ElementName= "MyFoo")]
public class Foo : List<Foo2>
{
    #region Private Members
    #endregion
    #region Public Properties
    #endregion
}
[Serializable, XmlRoot(ElementName="YourFoo")]
public class Foo2
{
}

The output is:
<MyFoo>
  <Foo2/>
</MyFoo>
The desire output:
<MyFoo>
  <YourFoo/>
</MyFoo>

具有动态元素名称的序列化和泛型列表

只需将Foo2上的XmlRoot更改为XmlType,将ElementName更改为TypeName,如下所示:

[Serializable, XmlType(TypeName="YourFoo")]
public class Foo2
{
}

不错,已经找了一段时间了:-)

如何控制List集合的元素名称,例如

[XmlElement(ElementName = "BOOKS")]
public static List<ObjBook> BookList = new List<ObjBook>();

XML结果:

<BOOKS>
    <BOOK>
        <Title>Title1</Title>
        <Author>Auther1</Author>
    </BOOK>
    <BOOK>
        <Title>Title2</Title>
        <Author>Auther2</Author>
    </BOOK>
</BOOKS>

我知道你可以设置XmlSerializer的XmlRootAttribute,但我很好奇它是否可以由List的属性完成?

(我确实考虑过创建一个新问题,但它关系密切,所以我认为可以)