反序列化根目录为列表的 XML 文档
本文关键字:XML 文档 列表 根目录 反序列化 | 更新日期: 2023-09-27 18:34:31
我有一个外部提供给我的XML文档,我需要将其导入到我的应用程序中。这份文件写得很糟糕,但我真的无能为力。
<?xml version="1.0" encoding="iso-8859-1"?>
<xml>
<Items>
<Property1 />
<Property2 />
...
</Items>
<Items>
<Property1 />
<Property2 />
...
</Items>
...
</xml>
我应该如何使用XmlSerializer
?我使用什么类设置似乎并不重要,或者无论我把XmlRoot(ElementName="xml")
放在我的基类上,它总是说<xml xmlns=''>
是意外的。
编辑:添加了我正在使用的 C# 代码
[XmlRoot(ElementName = "xml")]
public class Container
{
public List<Items> Items { get; set; }
}
public class Items
{
public short S1 { get; set; }
public short S2 { get; set; }
public short S3 { get; set; }
public short S4 { get; set; }
public short S5 { get; set; }
public short S6 { get; set; }
public short S7 { get; set; }
}
public class XMLImport
{
public Container Data{ get; private set; }
public static XMLImport DeSerializeFromFile(string fileName)
{
XMLImport import = new XMLImport();
XmlSerializer serializer = new XmlSerializer(typeof(Container));
using (StreamReader reader = new StreamReader(fileName))
import.Data = (Container)serializer.Deserialize(reader);
return import;
}
}
假设您有一个映射到每个<Items>
节点Items
类:
public class Items
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
您可以像这样反序列化Items
列表:
var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""iso-8859-1""?>
<xml>
<Items>
<Property1 />
<Property2 />
</Items>
<Items>
<Property1 />
<Property2 />
</Items>
</xml>");
var serializer = new XmlSerializer(typeof(List<Items>), new XmlRootAttribute("xml"));
List<Items> list = (List<Items>)serializer.Deserialize(doc.CreateReader());
XML 的根
不是列表,xml 的根是 <xml>
节点 我想你只是对它的名字感到困惑:)
请访问以下链接,它有很多很多人投票的好答案。
这是链接:如何反序列化 XML 文档
将XML 反序列化为对象时出错 - xmlns='' 不是预期的
只需取下命名空间 =:
[XmlRoot("xml"), XmlType("xml")]
public class RegisterAccountResponse {...}