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 类型使用标准和快速反序列化。有人可以帮助我完成这项任务吗?
为了快速修复,您可以在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