XML反序列化

时间:2016-03-01 21:20:03

标签: c# xml serialization deserialization

我从调查系统中获得了一些XML。样本结构如下所示:

public void SayHello()
{
    try {
        _service.SayHello();
    } catch {
        _service = new HelloService();
        _service.SayHello();
    }
}

我的任务是读取XML文件并使用System.XML.Serialization引用和[XmlAttribute],[XmlElement]等标志将其反序列化为C#中的对象。 我不熟悉这种技术,因为我通常对DataSet类型使用标准和快速反序列化。 有人可以帮我完成这项任务吗?

2 个答案:

答案 0 :(得分:1)

大声笑...我明白,有时候某人可能处于非常困难的境地szataniel .......所以,不知道这是否有帮助,但使用您从XML创建的类...

        // Deserialize single instance
        XmlSerializer serializerSingle = new XmlSerializer(typeof(ReadXML.Xml2CSharp.Document));//, new XmlRootAttribute("document"));
        using (FileStream stream = File.OpenRead(@"Path to your XML File"))
        {
            // 'ReadXML.Xml2CSharp.Document' is the 'Document' class in your XML Classes
            ReadXML.Xml2CSharp.Document dezerializedXMLSingle = (ReadXML.Xml2CSharp.Document)serializerSingle.Deserialize(stream);
        }
        }

将反序列化您文档的一个实例'在XML ...

/////////////////////////////////////////////// //

反序列化一个列表我认为你的XML需要有一个外部根节点就像这样(我需要对此进行更正)....

<documents>
    <document>
    ...........
    </document>
    <document>
    ...........
    </document>
</documents>

然后您可以使用上面的SAME类......

        // Deserialize to List
        XmlSerializer serializerList = new XmlSerializer(typeof(List<ReadXML.Xml2CSharp.Document>), new XmlRootAttribute("documents"));
        using (FileStream stream = File.OpenRead(@"Path to your XML File"))
        {
            // 'ReadXML.Xml2CSharp.Document' is the 'Document' class in your XML Classes
            List<ReadXML.Xml2CSharp.Document> dezerializedXMLList = (List<ReadXML.Xml2CSharp.Document>)serializerList.Deserialize(stream);
        }

我必须添加一个新的根节点(文档)并设置XmlRootAttribute(&#34; documents&#34;),以便在Xml2CSharp.com上使用从XML创建的相同类

答案 1 :(得分:0)

要快速修复,您可以在Visual Studio中创建一个新类,将XML复制到剪贴板,然后选择&#34;编辑&#34;,&#34;粘贴特殊&#34;,&#34;粘贴XML作为类&#34;。

这将自动生成一个类,然后您可以将其用于序列化/反序列化。

但是,正如@Tdorno建议的那样,网站上有很多有用的例子,例如:C# Deserialization xml file