2013-12-01 4 views
1

я имею два класса A и B. А для ROOT-элемент и B должен быть массив B.XML-сериализации массив класса

public class A 
{ 
    public B[] b; 
} 

public class B 
{ 
    public string param1; 
    public string param2; 
} 

Создание экземпляров и заполнить данные выглядеть следующим образом :

A test = new A(); 
test.b = new B[2]; 

test.b[0] = new B(); 
test.b[1] = new B(); 

test.b[0].param1 = "b0-p1"; 
test.b[0].param2 = "b0-p2"; 
test.b[1].param1 = "b1-p1"; 
test.b[1].param2 = "b1-p2"; 

Теперь сериализации:

System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(A)); 
System.IO.TextWriter wr = new System.IO.StreamWriter(@"c:\ser.xml"); 
ser.Serialize(wr, test); 
wr.Close(); 

Сгенерированный XML выглядеть следующим образом

<?xml version="1.0" encoding="utf-8"?> 
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org /2001/XMLSchema"> 
    <b> 
    <B> 
     <param1>b0-p1</param1> 
     <param2>b0-p2</param2> 
    </B> 
    <B> 
     <param1>b1-p1</param1> 
     <param2>b1-p2</param2> 
    </B> 
    </b> 
</A> 

Но я хочу, чтобы это:

<?xml version="1.0" encoding="utf-8"?> 
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org /2001/XMLSchema"> 
    <b> 
    <param1>b0-p1</param1> 
    <param2>b0-p2</param2> 
    </b> 
    <b> 
    <param1>b1-p1</param1> 
    <param2>b1-p2</param2> 
    </b> 
</A> 

Можете ли вы сказать мне, что я делаю неправильно?

рассматривает raiserle

ответ

2

Украсьте B[] b недвижимость с XmlElementAttribute:

public class A 
{ 
    [XmlElement("b")] 
    public B[] b; 
} 

Вам нужно using System.Xml.Serialization; в верхней части файла, чтобы сделать его работу.

+1

Thx, я опробовал его с неправильным атрибутом: 'System.Xml.Serialization.XmlArray ("Ъ")' и ' System.Xml.Serialization.XmlArrayItem ("Ъ")' Thx, thx .. thx – raiserle

Смежные вопросы