序列化/反序列化XML数据时,XML元素和类属性是否具有相同的名称?
问题描述:
例如:序列化/反序列化XML数据时,XML元素和类属性是否具有相同的名称?
这是一个简单的类。
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>
答
除非你指定(如阿维亚德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; }}
}
然后XML在Foo
Bar
出现之前将设置Baz
为“富”,而XML在其中Bar
Foo
出现之前将设置Baz
为“栏”。