将对象序列化为XML时遇到了一些问题。在开始时,这是类Order,它具有类型的一些属性,如string,int ...
public class Order
{
[XmlAttribute("ObjectType")]
public string TypeName
{
get; set;
}
[XmlAttribute("ID")]
public string ID
{
get; set;
}
[XmlAttribute("TID")]
public string TID
{
get; set;
}
[XmlAttribute("Command")]
public Command Command
{
get; set;
}
public Order()
{
}
}
如您所见,此类还有一个Command类型的属性。 Command类有一个名为Name的字符串属性:
public class Command
{
[XmlAttribute("Name")]
public string Name
{
get; set;
}
}
问题是什么?我需要得到这样的结果:
<Order ObjectType="TestCase" ID="2" TID="W404" Command="SomeCommand" />
Where&#39; SomeCommand&#39;是&#39;姓名&#39;的价值此Command对象的属性。
用简单的话说:我需要定义如何将Command对象序列化为XML属性的行为 - 返回Name字符串。非常重要的是,我还必须能够将此XML反序列化为对象结构。
希望我的帖子可以理解,我的问题也清楚地解释了。 ;)
祝你好运!
答案 0 :(得分:0)
假设您有某种方法可以从命令名重构命令,您可以引入派生属性CommandName
来序列化名称,并使用xml serialization attributes使XmlSerializer
输出所需的名称属性作为具有所需名称的属性:
public class Order
{
[XmlAttribute("ObjectType")]
public string TypeName
{
get;
set;
}
[XmlAttribute("ID")]
public string ID
{
get;
set;
}
[XmlAttribute("TID")]
public string TID
{
get;
set;
}
[XmlIgnore]
public Command Command
{
get;
set;
}
[XmlAttribute("Command")]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[Browsable(false)]
public string CommandName
{
get
{
return Command == null ? null : Command.Name;
}
set
{
// Logic to convert CommandName to Command, e.g.:
Command = Command.FindByName(value); // or whatever.
}
}
public Order()
{
}
}
CommandName
属性必须公开才能生效。