C#XML反序列化为多个对象

时间:2012-10-02 13:01:15

标签: c# xml

我将给定的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属性添加到另一个单独的对象中,这就是我所坚持的。

2 个答案:

答案 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不会这样做。