我有一个 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<MyProducts>
<Product Name="P1" />
<Product Name="P2" />
</MyProducts>
还有一个 C# 对象:
Public Class Product
{
[XmlAttribute]
Public Name {get; set;}
}
现在使用 .NET Serializer 类可以将 XML 文件反序列化为 IList 而无需创建 MyProducts 对象吗?
所以我想在序列化之前以某种方式仅选择 Product 元素
最佳答案
有一种快速而肮脏的方法可以实现您想要的 - 只需将 "MyProducts" 替换为 BCL 类满意的内容 - ArrayOfProduct:
string xml = @"<?xml version='1.0' encoding='UTF-8;'?>
<MyProducts>
<Product Name='P1' />
<Product Name='P2' />
</MyProducts>";
//secret sauce:
xml = xml.Replace("MyProducts>", "ArrayOfProduct>");
IList myProducts;
using (StringReader sr = new StringReader(xml))
{
XmlSerializer xs = new XmlSerializer(typeof(List<Product>));
myProducts = xs.Deserialize(sr) as IList;
}
foreach (Product myProduct in myProducts)
{
Console.Write(myProduct.Name);
}
当然,正确的方法是转换 XML 文档以适本地替换 MyProducts
节点 - 而不是使用字符串替换 - 但这说明了这一点。
关于c# - 使用 .NET 序列化器将 XML 序列化为 .NET 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135734/