Правильное использование XMLRootAttribute в Monotouch - PullRequest
2 голосов
/ 17 февраля 2011

У меня есть класс под названием Школа, который можно сериализировать. Когда он сериализует / десериализует, мне нужно, чтобы корневой элемент назывался школа, а не школа, не меняя название класса на школу. Поэтому я использовал атрибут xmlroot следующим образом:

[XMLRoot (ElementName = "school")]

Я тоже пробовал:

[XMLRoot ( "школа")]

Ничего из этого не сделало, и полученный XML-файл содержал корневой элемент с именем School.

Я что-то упустил?

1 Ответ

0 голосов
/ 18 июля 2011

Я не вижу, в чем может быть проблема, но следующий код работает с MonoTouch 4 (возможно, вы найдете разницу между ним и вашим собственным кодом).

Я определил такой класс:

[XmlRoot ("School")]
public class Wrong {
    public string Name { get; set; }
}

Затем я сериализовал его в MemoryStream, который затем считал в строку.

        Wrong bad = new Wrong ();
        XmlSerializer ser = new XmlSerializer(typeof(Wrong));
        using (MemoryStream ms = new MemoryStream ()) {
            ser.Serialize (ms, bad);
            ms.Position = 0;
            StreamReader sr = new StreamReader (ms);
            string st = sr.ReadToEnd ();
        }

Значение 'st' равно:

<?xml version="1.0" encoding="utf-8"?>
<School xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
...