如何创建一个可序列化的类来使用单个节点反序列化XML?

时间:2014-03-20 13:50:36

标签: c# xml xsd

我找不到在C#中创建可序列化类的方法来处理来自具有单个节点的XML的反序列化,如下所示:

<?xml version="1.0"?>
<code>
    GM47R4 5I3RR4 LUB
</code>

我一直在尝试使用XSD.exe首先创建XSD然后再创建C#类,但它不起作用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

    var xmlSer = new XmlSerializer(typeof (Code));
    var code = new Code {Value = "xx"};
    var sb = new StringBuilder();
    var wri = new StringWriter(sb);
    xmlSer.Serialize(wri, code);
    Console.WriteLine(sb.ToString());

    [XmlRoot(ElementName = "Code")]
    public class Code
    {
        [XmlText]
        public string Value { get; set; }
    }

输出

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

因此可以用来反序列化你的xml,默认情况下会忽略命名空间。

答案 1 :(得分:1)

如果你真的需要一个自定义类,

@woutervs'代码是好的。对于XML这么简单,是否真的有必要创建一个单独的类?可能不会,除非你有要求,否则你的问题不包括在内。

我只使用XDocument类:

const string xml = @"<?xml version=""1.0""?>
<code>
    GM47R4 5I3RR4 LUB
</code>";
XDocument document = XDocument.Parse(xml);

Console.WriteLine(document.Element("code").Value.Trim());

XDocument也可以轻松地用于创建XML:

var document = new XDocument(new XElement("code", "GM47R4 5I3RR4 LUB"));

Console.WriteLine(document);