c# - 序列化多个对象

标签 c# xml serialization

我的序列化代码是这样的..

public class slab
{
    public int lowerlimit {get; set;}
    public int upperlimit { get; set; }
    public int percentage { get; set; }

}

public class Details
{
    static void Main(string[] args)
    {
        slab s= new slab();
        s.lowerlimit = 0;
        s.upperlimit = 200000;
        s.percentage = 0;
        XmlSerializer serializer = new XmlSerializer(s.GetType());
        StreamWriter writer = new StreamWriter(@"filepath");
        serializer.Serialize(writer.BaseStream, s);
    }
}

它工作正常,我得到的输出文件为:

<?xml version="1.0"?>
<slab xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <lowerlimit>0</lowerlimit>
    <upperlimit>200000</upperlimit>
    <percentage>0</percentage>
</slab>

但是如何序列化多个对象呢?我想得到一个输出文件作为

<slabs>
    <slab>
        <lowerlimit>0</lowerlimit>
        <upperlimit>200000</upperlimit>
        <percentage>0</percentage>
    </slab>
    <slab>
        <lowerlimit>200000</lowerlimit>
        <upperlimit>500000</upperlimit>
        <percentage>10</percentage>
    </slab>
    <slab>
        <lowerlimit>500000</lowerlimit>
        <upperlimit>1000000</upperlimit>
        <percentage>20</percentage>
    </slab>
    <slab>
        <lowerlimit>1000000</lowerlimit>
        <upperlimit>0</upperlimit>
        <percentage>30</percentage>
    </slab>
</slabs>

最佳答案

实际上,所需的输出格式不是有效的 XML,因为 XML 文件始终需要单个根元素。你可以把你的 slab s 到一个列表 ( List<Slab> slabs = new List<Slab>(); ) 中并序列化它,但你可能会得到这样的输出:

<slabs>
    <slab>
    <lowerlimit>0</lowerlimit>
    <upperlimit>200000</upperlimit>
    <percentage>0</percentage>
    </slab>

    <slab>
    <lowerlimit>200000</lowerlimit>
    <upperlimit>500000</upperlimit>
    <percentage>10</percentage>
    </slab>

    <slab>
    <lowerlimit>500000</lowerlimit>
    <upperlimit>1000000</upperlimit>
    <percentage>20</percentage>
    </slab>

    <slab>
    <lowerlimit>1000000</lowerlimit>
    <upperlimit>0</upperlimit>
    <percentage>30</percentage>
    </slab>
</slabs>

编辑
另一种序列化方式可能是这样,告诉序列化器更多关于根元素的信息:

List<Slab> slabs = new List<Slab>();
slabs.Add(...);

XmlSerializer serializer = new XmlSerializer(slabs.GetType(), new XmlRootAttribute("slabs"));
StreamWriter writer = new StreamWriter(@"filepath");
serializer.Serialize(writer.BaseStream, slabs);

关于c# - 序列化多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247053/

相关文章:

c# - SetupSet() 已过时。代替什么?

c# - 多线程BigInteger操作

iphone - 如何使用 NSXMLParser 解析基本 XML 文件?

不使用注释的 Java 代码到 XML/XSD

java - Wicket 序列化/反序列化问题

java - 安全 - Jackson 密码序列化

c# - Alea GPU 教程未使用 FSharp.Core 4.4.0.0 在 VS 2015 Update 2 上编译

c# - 如何编写实验框架

sql-server - Azure XML 支持

c# - 使用 Json.NET 中的 JsonConvert 类检测反序列化对象是否缺少字段