我将给定的XML文件反序列化为单个对象,我工作正常。但是,我现在要调整XML文件,以便我将额外的属性反序列化为一个单独的对象,所以从一个给定的xml文件我可以填充两个对象,这可能在一个操作中吗?
这是我当前的代码和XML:
XML现在就是:
<NameCollection>
<Names>
<Name>
<description></description>
<Name>
<Name>
<description></description>
<Name>
</Names>
</NameCollection>
XML我希望如此:
<NameCollection>
<GenericName></GenericName>
<GenericDescription></GenericDescription>
<Names>
<Name>
<description></description>
<Name>
<Name>
<description></description>
<Name>
</Names>
</NameCollection>
代码:
NameCollection commands;
XMLSerializer serializer = new XMLSerializer(typeof(NameCollection));
StreamReader streamReader = new StreamReader(xmlpath);
commands = (NameCollection)serializer.Derserialize(streamreader);
streamReader.Close();
当前对象:
[Serializable()]
public class TestCommand
{
public string description{get;set;}
}
[Serializable()]
[XmlRoot("NameCollection")]
public class NameCollection
{
[XmlArray("Commands")]
[XmlArrayItem("Command", typeof(TestCommand))]
public TestCommand[] TestCommand {get;set;}
}
然后我希望将GenericName和GenericDescription属性添加到另一个单独的对象中,这就是我所坚持的。
答案 0 :(得分:3)
我认为你的后代是让你的类反映XML的结构,而不是两个类。所以你想要一个像这样的结构:
public class TestCommand
{
public string description{get;set;}
}
[XmlRoot("NameCollection")]
public class NameCollection
{
public string GenericName {get; set;}
public string GenericDescription {get; set;}
[XmlArray("Commands")]
[XmlArrayItem("Command", typeof(TestCommand))]
public TestCommand[] TestCommand {get;set;}
}
然后以完全相同的方式将其序列化,完成工作。
答案 1 :(得分:2)
根据您的布局,XmlSerializer
唯一希望将这些额外值放在NameCollection
上的地方,即
[XmlRoot("NameCollection")]
public class NameCollection
{
public string GenericName {get;set:}
public string GenericDescription {get;set:}
[XmlArray("Names")]
[XmlArrayItem("Name", typeof(TestCommand))]
public TestCommand[] TestCommand {get;set;}
}
如果您希望它继续使用其他对象,那么:XmlSerializer
不会这样做。