在序列化/反序列化XML数据时,XML元素和类属性是否具有相同的名称?

时间:2010-01-03 22:14:50

标签: c# xml serialization xml-serialization

例如:

这是一个简单的课程。

class Hero
{
    public string faction;
    public string name;
    public HeroType herotype;
}

这是XML对应物。

<Hero>
    <android>
        <Faction>evil</Faction>
        <nombre>android</nombre>
    </android>
</Hero>

为了序列化信息,属性必须完全相同吗?

我的主要目的是使用我的XML文件中的信息将信息“加载”到Hero类。

2 个答案:

答案 0 :(得分:4)

您可以使用[XmlElement(...)]装饰字段以指定备用名称。它们也不必处于相同的顺序。但是,您指定的Xml不适合您指定的类的结构。

将您的Xml修改为以下内容:

<Hero>
    <Name>android</Name>
    <Faction>evil</Faction>
    <HeroType>Agility</HeroType>
</Hero>

答案 1 :(得分:0)

除非您另行指定(如Aviad P.所说,通过使用[XmlElement()]属性修饰属性),XML中的名称将与属性名称完全匹配,反之亦然。

订购应该是微不足道的。我说“应该是”因为它实际上是否 无关紧要取决于你如何设计你的课程。

虽然一般来说最好让属性设置器没有副作用,但是当你处理XML反序列化时,它是必不可少的。在反序列化期间,属性将按它们在XML中出现的顺序设置为它们的值。

所以如果你有这个课程:

public class Test
{
   private string _Foo;
   public string Foo { set { _Foo = value; _Baz="Foo"; } get { return _Foo; }}

   private string _Bar;
   public string Bar { set { _Bar = value; _Baz="Bar"; } get { return _Bar; }}

   private string _Baz;
   public string Baz { set { _Baz = value; } get { return _Baz; }}
}

然后在Foo之前显示Bar的XML会将Baz设置为“Foo”,而在Bar之前显示Foo的XML将设置{ {1}}到“酒吧”。