序列化强类型对象的列表 [英] Serializing a list of strongly typed objects

查看:99
本文介绍了序列化强类型对象的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可能已经在设计决策搞砸。相反,使用自定义对象的强类型集合中,我使用了一个泛型列表。从本质上讲,我拥有的是:

 公共类AreaFields
{
    [XmlArray(项目)]
    [XmlArrayItem(项目)]
    公开名单<&领域GT; {字段设置;得到; }    [XmlAttribute]
    INT编号{设置;得到; }
}公共类字段
{
    [XmlAttribute]
    公共字符串名称{设置;得到; }
}

在整个应用程序,我已经使用列表< AreaFields> 现在,我需要序列化列表为XML。我所希望得到的是:

 < SomeXMLTag>
    < AreaFields ID ='1000'>
     <项目>
       <项目名称=测试1/>
       <项目名称=Test2的/>
     < /项目>
    < / AreaFields>
    < AreaFields ID ='1001'>
     <项目>
       <项目名称=测试1/>
       <项目名称=Test2的/>
     < /项目>
    < / AreaFields>
    < / SomeXMLTag>

既然不能序列化列表与LT;>(?还是可以的我),我将不得不序列化列表的每一个项目。

 例如:清单< AreaFields>名单=新名单,LT; AreaFields>();
//更多code以添加到列表
    列表[0] .GetRawXML(); //一个方法,我必须序列


解决方案

您将需要一个包装类;那么序列 MyWrapper 的实例来获取XML按照您的例子。

  [XmlRoot(SomeXMLTag)]
公共类MyWrapper
{
    [XmlElement的(AreaFields)]
    公开名单< AreaFields> AreaFields {搞定;组; }
}公共类AreaFields
{
    [XmlArray(项目)]
    [XmlArrayItem(项目)]
    公开名单<&领域GT; {字段设置;得到; }    [XmlAttribute]
    公众诠释ID {设置;得到; }
}公共类字段
{
    [XmlAttribute]
    公共字符串名称{设置;得到; }
}

I might have messed up on a design decision. Instead of using a strongly typed collection of custom objects, I have used a generic List. Essentially, what i have is:

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; }
}

Throughout the application, I have used List<AreaFields> Now, I am in need of serializing the list into XML. What I am hoping to get is:

   <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>

Since I cannot serialize List<> (or can I?), I will have to serialize every item of the list.

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

解决方案

You'll need a wrapper class; then serialize the instance of MyWrapper to get the xml as per your example.

[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; }
}

这篇关于序列化强类型对象的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆