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

C# 序列化/反序列化XML数据时,XML元素和类属性是否具有相同的名称?,c#,xml,serialization,xml-serialization,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> <

例如:

这里有一个简单的类

class Hero
{
    public string faction;
    public string name;
    public HeroType herotype;
}
这里是XML对应物

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

邪恶的
安卓
属性是否必须完全相同才能序列化信息


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

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

将Xml修改为如下内容:

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

安卓
邪恶的
敏捷性

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

将Xml修改为如下内容:

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

安卓
邪恶的
敏捷性

除非您另有指定(正如Aviad p.所说,通过使用
[xmlement()]
属性装饰属性),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将
Baz
设置为“Bar”

除非您另外指定(正如Aviad p.所说,通过使用
[xmlement()]
属性装饰属性),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将
Baz
设置为“Bar”