【发布时间】:2014-11-20 08:49:27
【问题描述】:
我遇到了 XML 反序列化的问题。好吧,假设我的类具有三个属性:
public class Order
{
private string name;
[XmlAttribute("Name")]
public string Name
{
get
{
return name;
}
set
{
if (name != value)
{
name = value;
}
}
}
private string tid;
[XmlAttribute("TID")]
public string TID
{
get
{
return tid;
}
set
{
if (tid != value)
{
tid = value;
}
}
}
private Command command;
[XmlAttribute("Command")]
public string Command
{
get
{
return command.Name;
}
set
{
command = new Command(TID, Name, value);
}
}
public Order()
{
}
}
如您所见,我需要在反序列化 Command 属性上创建一个带有参数构造函数的对象 Command - 但我需要 TID 和 Name 属性。我需要确保这些字段不为空。正如我所观察到的,XmlSerializer 正在根据用户编写属性的顺序反序列化属性。例如:
<Order Command="SetPlus" TID="W403" Name="SomeName" />
在这种情况下,第一个序列化的将是 Command 属性。但我还没有 TID 和 Name 属性!我不能相信用户会以正确的顺序传递属性,例如:
<Order TID="W403" Name="SomeName" Command="SetPlus" />
好吧,我需要一些事件或可以在反序列化完成时调用的东西,或者我需要确保 XmlSerializer 将按我想要的顺序反序列化属性。我唯一发现的是:
[XmlElement(Order = 1)]
或
[XmlElementAttribute(Order = 1)]
但它不适用于 XmlAttribute。
有办法做到这一点吗?希望我清楚地解释了我的问题。
【问题讨论】:
-
您是否对所有公共成员使用 Order 属性?
标签: c# xml deserialization