在Monotouch中正确使用XMLRootAttribute

时间:2011-02-17 17:14:04

标签: c# .net mono xml-serialization xamarin.ios

我有一个名为School的课程,可以序列化。当它序列化/反序列化时,我需要将根元素称为school而不是School,而不必将类名更改为school。所以我用以下方式使用了xmlroot属性:

[XMLRoot(ElementName =“school”)]

我也尝试过:

[XMLRoot( “学校”)]

这些都没有做任何事情,结果XML文件包含一个名为School的根元素。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我看不出可能出现什么问题,但以下代码适用于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" />