3

因此,我正在处理一些我认为很可能格式不正确的 XML 文件,并且我试图弄清楚如何以及是否可以使用 XmlSerializer 将此 XML 反序列化为逻辑业务对象。假设我有以下 XML 文件:

<Root>
   <ArrayType1 Name="Bob"/>
   <ArrayType1 Name="Jim"/>
   <ArrayType2 Name="Frank">
      <SubItem Value="4"/>
   </ArrayType2>
   <ArrayType2 Name="Jimbo">
      <SubItem Value="2"/>
   </ArrayType2>
</Root>

现在我想创建一个具有这三种类型的类,Root、ArrayType1 和 ArrayType2,但我想在 Root 中获取两个列表,一个包含 ArrayType1 项的集合,一个包含 ArrayType2 项的集合,但似乎这些项目需要有某种根,例如,我知道如何反序列化以下内容就好了:

<Root>
   <ArrayType1Collection>
      <ArrayType1 Name="Bob"/>
      <ArrayType1 Name="Jim"/>
   </ArrayType1Collection>
   <ArrayType2Collection>
      <ArrayType2 Name="Frank">
         <SubItem Value="4"/>
      </ArrayType2>
      <ArrayType2 Name="Jimbo">
         <SubItem Value="2"/>
      </ArrayType2>
   </ArrayType2Collection>
</Root>

但是,如果没有 ArrayType# 元素周围的父 ArrayType#Collection 元素,我将如何反序列化呢?

XML 序列化器会允许这样做吗?

4

1 回答 1

11

不就是这样吗:

[Serializable]
public class Root {
    [XmlElement("ArrayType1")]
    public List<ArrayType1> ArrayType1 {get;set;}

    [XmlElement("ArrayType2")]
    public List<ArrayType2> ArrayType2 {get;set;}
}

?

或者,只需将 xml 放入文件(“foo.xml”)并使用:

xsd foo.xml
xsd foo.xsd /classes

并查看生成的 foo.cs

于 2009-02-10T22:22:20.363 回答