序列化多个对象
我的序列化代码是这样的..序列化多个对象
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);
正常工作:-)。但我没有收到父母的标签
您可以创建一个班级 - 我正在更改我的答案... – 2013-03-06 13:00:24
如果我在另一个班级中写入它,我的主班级(在向Slabs添加项目的位置)无法找到“Slabs”。 – 2013-03-06 13:40:26
您可以使用以下代码。
List<Slab> listSlabs = new List<Slab>();
//add Slab to listSlabs
您可以序列化列表。
板S =新的平板(); slab s2 =新板(); listSlabs.add(一个或多个); listSlabs.add(S2);通过这种方式? – 2013-03-06 12:31:32
要很好的封装,并确保类型名称,你可以创建一个名为砖新的对象,即只包含List<Slab>
。将这些板添加到这个新对象并对其进行序列化。
使用
XmlSerializer serializer = new XmlSerializer(**slabs**.GetType(), new XmlRootAttribute("slabs"));
而不是
XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs"));
把它们放到一个数组和序列化阵列... – 2013-03-06 12:12:25