2010-02-06 2 views
1

Я пытаюсь сериализовать класс в XML, но у меня есть некоторые строгие требования к выходу (потому что я хочу, чтобы Rails ActiveResource потреблял его). Одно из этих требований специально предназначено для массивов. Вот два примера:XML-сериализация массивов с типом = "array" в .NET

class Person { public string FirstName { get; set; } } 

List<Person> people = new List<Person>(); 
people.Add(new Person {...}); 
people.Add(new Person {...}); 

Если я сериализация списка людей, мне нужен этот вывод:

<People type="array"> 
    <Person> 
    <FirstName>blah</FirstName> 
    </Person> 
    <Person>...</Person> 
</People> 

Другой пример, как это:

class Person 
{ 
    public string FirstName { get; set; } 
    public List<Address> Addresses { get; set; } 
} 

class Address 
{ 
    public string Line1 { get; set; } 
} 

Если сериализации людей, я нужен этот выход:

<Person> 
    <FirstName>blah</FirstName> 
    <Addresses type="array"> 
    <Address>...</Address> 
    </Addresses> 
</Person> 

Есть ли способ обмануть XmlSerializer для создания этого вывода?

ответ

0

Вы также можете посмотреть Controlling XML Serialization Using Attributes.

Нечто подобное может работать для вас

[XmlRoot(ElementName="People")] 
public class PeopleType 
{ 
    [XmlElement(ElementName="Person")] 
    public List<Person> people = new List<Person>() 
    { 
     new Person { FirstName = "Bob" }, 
     new Person { FirstName = "Sally" } 
    }; 

    [XmlAttribute] 
    public string type = "array"; 
} 

PeopleType p = new PeopleType(); 
XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
ns.Add("", ""); 
XmlSerializer xs = new XmlSerializer(typeof(PeopleType)); 
using (StreamWriter sw = new StreamWriter("out.xml", false)) 
    xs.Serialize(sw, p, ns); 
+0

Это прекрасно работает. Я просто хочу указать, что он НЕ работает с сериализацией JSON. Вы получите {"people": [...]}, когда вы хотите только [...]. Что он сказал, он отлично решает проблему xml. –