带有动态元素名称的序列化和通用列表

时间:2012-02-15 17:39:17

标签: c# serialization

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

[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>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

很好,已经有一段时间了:-)

如何控制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的属性来完成?

(我确实考虑过创建一个新问题,但是它是如此紧密相关,所以我认为还可以)