XML 反序列化

本文关键字:反序列化 XML | 更新日期: 2023-09-27 18:37:00

我有一些来自调查系统的XML。示例结构如下所示:

<?xml version="1.0" encoding="windows-1250" standalone="yes" ?>
<document>
 <ID>100</ID>
 <DOCUMENT_DATA>
  <OWNER>SOME OWNER</OWNER>
  <CODING>WINDOWS-1250</CODING>
  <MAIN_DATA>
   <NAME>JOHN</NAME>
   <SURNAME>DOE</SURNAME>
   <SYSTEM_ID>000</SYSTEM_ID>
   <COUNTRY>GB</COUNTRY>
  </MAIN_DATA>
  <SUB_DATA>
   <STREET>SOME STREET</STREET>
   <BUILDING_NO>120</BUILDING_NO>
   <FLAT_NO>200</FLAT_NO>
   <CITY>LONDON</CITY>
  </SUB_DATA>
  <DESCRIPTION>
   <HAIR>BLACK</HAIR>
   <EYES>BROWN</EYES>
   <BODY>SLIM</BODY>
   <HEIGHT>176</HEIGHT>
   <STATUS>
    <STATUS_NAME>SINGLE</STATUS_NAME>
   </STATUS>
   <SEX>MALE</SEX>
   <TATOO>NO</TATOO>
   <PIERCING>NO</PIERCING>
  </DESCRIPTION>
  <INTEREST>
   <GENERAL>
    <SPORT>
     <MAIN>SURFING</MAIN>
     <TRAINING>EVERY DAY</TRAINING>
    </SPORT>
    <CARS>CLASSIC</CARS>
    <OTHER>MUSIC</OTHER>
   </GENERAL>
   <BOOKS>CRIMINALS</BOOKS>
   <MOVIES>THRILLER</MOVIES>
  </INTEREST>
 </DOCUMENT_DATA>
</document>

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

XML 反序列化

为了快速修复,您可以在Visual Studio中创建一个新类,将XML复制到剪贴板,然后选择"编辑","选择性粘贴","将XML粘贴为类"。

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

但是,正如@Tdorno所建议的,网站上有很多有用的示例,例如: C# 反序列化 xml 文件

哈哈...我知道有时有人可能会处于非常困难的境地 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>

然后你可以使用上面相同的类...

        // 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("文档"),以便使用从 XML 创建的相同类 Xml2CSharp.com

相关文章: