2013-03-06 6 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

Поместите их в массив и сериализовать массив ... –

ответ

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> 

EDIT
Другой способ сериализации может быть это, говоря сериалайзер более о корневом элементе:

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

работая хорошо :-). но я не получаю родительский тег как . Я получаю как . как я могу его изменить? –

+0

Вы можете создать класс - я меняю свой ответ ... –

+0

если я пишу его в другом классе, мой основной класс (где я добавляю элементы в Slabs) не может найти «Плиты». –

1

Вы можете использовать следующий код.

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

Вы можете сериализовать список.

+0

горбыль s = новая плита(); плита s2 = новая плита(); listSlabs.add (ы); listSlabs.add (с2); в этом случае? –

1

инкапсулировать красиво, и обеспечить имя типа, вы можете создать новый объект под названием плита, которая содержит только List<Slab>. Добавьте плиты к этому новому объекту и сериализуйте его.

0

Использование

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

Вместо

XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs")); 
Смежные вопросы