2013-03-06 32 views
8
đang

serialization của tôi là như thế này ..Serialize nhiều đối tượng

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

nó làm việc tốt và tôi nhận được tập tin đầu ra như:

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

Nhưng làm thế nào tôi có thể serialize nhiều hơn một đối tượng? Tôi muốn nhận tệp xuất dưới dạng

<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

Đặt chúng trong một mảng và sắp đặt từng mảng ... –

Trả lời

10

Thực ra định dạng đầu ra mong muốn không phải là XML hợp lệ, vì tệp XML luôn yêu cầu một phần tử gốc duy nhất. Bạn có thể đặt slab của bạn vào một danh sách (List<Slab> slabs = new List<Slab>();) và serialize đó, nhưng có thể bạn sẽ nhận được kết quả như thế:

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

EDIT
Một cách khác để serializing thể này, nói với serializer hơn về phần tử gốc:

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

hoạt động tốt :-). nhưng tôi không nhận được thẻ gốc là . tôi đang nhận được như . làm thế nào tôi có thể thay đổi nó ?? –

+0

Bạn có thể tạo một lớp học - Tôi đang thay đổi câu trả lời của mình ... –

+0

nếu tôi viết nó trong lớp khác lớp chính của tôi (nơi đang thêm mục vào Bảng) không thể tìm thấy "Bảng". –

1

Bạn có thể sử dụng mã sau đây.

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

Bạn có thể sắp xếp thứ tự danh sách.

+0

phiến s = new phiến(); slab s2 = new slab(); listSlabs.add (s); listSlabs.add (s2); theo cách này? –

1

Để đóng gói độc đáo, và đảm bảo tên loại, bạn có thể tạo một đối tượng mới được gọi là tấm, đó chỉ chứa một List<Slab>. Thêm các tấm vào đối tượng mới này và tuần tự hóa nó.

0

Sử dụng

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

Thay vì

XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs")); 
Các vấn đề liên quan