Избавьтесь от корневого элемента <ArrayOfClassname> при сериализации массива
Вот пример кода:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
...
static void Main()
{
Person[] persons = new Person[]
{
new Person{ FirstName = "John", LastName = "Smith"},
new Person{ FirstName = "Mark", LastName = "Jones"},
new Person{ FirstName= "Alex", LastName="Hackman"}
};
XmlSerializer xs = new XmlSerializer(typeof(Person[]), "");
using (FileStream stream = File.Create("persons-" + Guid.NewGuid().ToString().Substring(0, 4) + ".xml"))
{
xs.Serialize(stream, persons);
}
}
Вот вывод:
<?xml version="1.0"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Person>
<Person>
<FirstName>Mark</FirstName>
<LastName>Jones</LastName>
</Person>
<Person>
<FirstName>Alex</FirstName>
<LastName>Hackman</LastName>
</Person>
</ArrayOfPerson>
Вот вопрос. Как избавиться от корневого элемента и визуализировать людей так:
<?xml version="1.0"?>
<Person>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Person>
<Person>
<FirstName>Mark</FirstName>
<LastName>Jones</LastName>
</Person>
<Person>
<FirstName>Alex</FirstName>
<LastName>Hackman</LastName>
</Person>
Спасибо!
2 ответа
Решение
Это уродливый XML
Вы не можете получить его через XmlSerializer
, но вы можете изменить ArrayOfPersno
имя элемента к чему-либо еще:
пример:
XmlSerializer xs = new XmlSerializer(typeof(Person[]),
new XmlRootAttribute("Persons"));
дам тебе:
<?xml version="1.0"?>
<Persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Person>
...
ИМО ты должен использовать объект верхнего уровня, т.е.
[XmlRoot("whatever")]
public class Foo {
[XmlElement("Person")]
public List<Person> People {get;set;}
}
Который должен сериализоваться как элемент "что угодно" с несколькими подэлементами "Персона".