2013-03-06 59 views
8

我的序列化代碼是這樣的..序列化多個對象

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

把它們放到一個數組和序列化陣列... – 2013-03-06 12:12:25

回答

10

實際上,所需的輸出格式不是有效的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); 
+0

正常工作:-)。但我沒有收到父母的標籤。我越來越像。我怎麼能改變它? – 2013-03-06 12:39:22

+0

您可以創建一個班級 - 我正在更改我的答案... – 2013-03-06 13:00:24

+0

如果我在另一個班級中寫入它,我的主班級(在向Slabs添加項目的位置)無法找到「Slabs」。 – 2013-03-06 13:40:26

1

您可以使用以下代碼。

List<Slab> listSlabs = new List<Slab>(); 
//add Slab to listSlabs 

您可以序列化列表。

+0

板S =新的平板(); slab s2 =新板(); listSlabs.add(一個或多個); listSlabs.add(S2);通過這種方式? – 2013-03-06 12:31:32

1

要很好的封裝,並確保類型名稱,你可以創建一個名爲磚新的對象,即只包含List<Slab>。將這些板添加到這個新對象並對其進行序列化。

0

使用

XmlSerializer serializer = new XmlSerializer(**slabs**.GetType(), new XmlRootAttribute("slabs")); 

而不是

XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs"));