C# 序列化多个对象
我的序列化代码如下C# 序列化多个对象,c#,xml,serialization,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();
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>
0
200000
0
但是如何序列化多个对象呢?我想得到一个输出文件作为
<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>
0
200000
0
200000
500000
10
500000
1000000
20
1000000
0
30
您可以使用以下代码
List<Slab> listSlabs = new List<Slab>();
//add Slab to listSlabs
List listsplates=new List();
//将楼板添加到列表楼板
您可以序列化列表。实际上,所需的输出格式不是有效的XML,因为XML文件总是需要单个根元素。您可以将
slab
s放入一个列表(list slab=new list();
)并将其序列化,但您可能会得到这样的输出:
<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>
0
200000
0
200000
500000
10
500000
1000000
20
1000000
0
30
编辑序列化的另一种方式可以是这样,告诉序列化程序有关根元素的更多信息:
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);
List slab=new List();
加上(…);
XmlSerializer serializer=新的XmlSerializer(slaps.GetType(),新的XmlRootAttribute(“slaps”);
StreamWriter writer=新的StreamWriter(@“文件路径”);
serializer.Serialize(writer.BaseStream,slab);
为了更好地封装并确保类型名称,您可以创建一个名为slab的新对象,该对象只包含一个列表
。将板添加到此新对象并将其序列化。使用
XmlSerializer serializer = new XmlSerializer(**slabs**.GetType(), new XmlRootAttribute("slabs"));
而不是
XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs"));
将它们放在一个数组中并序列化数组…slab s=new slab();板s2=新板();列表板。添加(s);列表板。添加(s2);这样?工作很好:-)。但我没有得到家长标签作为。我越来越喜欢。我如何更改它?如果我在另一个类中编写它,我的主类(在其中向slab添加项)无法找到“slab”。我对我的答案做了更多更改,以便它与您现有的代码保持一致。