如何创建一个可序列化的类,以便用单个节点反序列化XML

本文关键字:单个 反序列化 节点 XML 序列化 创建 何创建 一个 | 更新日期: 2023-09-27 17:51:09

我找不到一种方法在c#中创建一个可序列化的类来处理来自具有单个节点的XML的反序列化,就像这样:

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

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

谢谢你的帮助。

如何创建一个可序列化的类,以便用单个节点反序列化XML

    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,默认情况下名称空间将被忽略。

@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);