序列化强类型对象列表

Dot*_*ude 1 c# xml asp.net

我可能搞砸了一个设计决定.我没有使用强类型的自定义对象集合,而是使用了通用List.基本上,我所拥有的是:

public class AreaFields
{
    [XmlArray("Items")]
    [XmlArrayItem("Item")]
    public List<Fields> Fields { set; get; }

    [XmlAttribute]
    int id { set; get; }
}

public class Fields
{
    [XmlAttribute]
    public string Name { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

在整个应用程序中,我使用了List<AreaFields>Now,我需要将列表序列化为XML.我希望得到的是:

   <SomeXMLTag>
    <AreaFields id='1000'>
     <Items>
       <Item Name="Test1" />
       <Item Name="Test2" />
     </Items>
    </AreaFields>
    <AreaFields id='1001'>
     <Items>
       <Item Name="Test1" />
       <Item Name="Test2" />
     </Items>
    </AreaFields>
    </SomeXMLTag>
Run Code Online (Sandbox Code Playgroud)

由于我无法序列化List <>(或者我可以吗?),我将必须序列化列表中的每个项目.

Ex: List<AreaFields> list = new List<AreaFields>();
//    more code to add to list
    list[0].GetRawXML(); //A method i have to serialize
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

你需要一个包装类; 然后MyWrapper按照您的示例序列化实例以获取xml.

[XmlRoot("SomeXMLTag")]
public class MyWrapper
{
    [XmlElement("AreaFields")]
    public List<AreaFields> AreaFields { get; set; }
}

public class AreaFields
{
    [XmlArray("Items")]
    [XmlArrayItem("Item")]
    public List<Fields> Fields { set; get; }

    [XmlAttribute]
    public int id { set; get; }
}

public class Fields
{
    [XmlAttribute]
    public string Name { set; get; }
}
Run Code Online (Sandbox Code Playgroud)