我从调查系统中获得了一些XML。样本结构如下所示:
public void SayHello()
{
try {
_service.SayHello();
} catch {
_service = new HelloService();
_service.SayHello();
}
}
我的任务是读取XML文件并使用System.XML.Serialization引用和[XmlAttribute],[XmlElement]等标志将其反序列化为C#中的对象。 我不熟悉这种技术,因为我通常对DataSet类型使用标准和快速反序列化。 有人可以帮我完成这项任务吗?
答案 0 :(得分:1)
// 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