c# - 使用 .NET 序列化器将 XML 序列化为 .NET 类

标签 c# .net vb.net xml-serialization

我有一个 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/

相关文章:

c# - 一次显示 List 中的项目 10 个字符串项目

c# - 如果需要,确定用户是否可以获得管理员权限

css - VB.Net 查找埋在 DOM 中时要单击的类 ID

.net - 在 VB 中的自定义 Linq Provider 中实现字符串比较器

vb.net - IsNot Nothing 没有失败

C# - 在 Windows 7 Phone 中将 byte[] 转换为 String

c# - ReturnsAsync 的最小起订量回调

c# - INSERT 存储过程不接受空值

c# - 递归正则表达式 : Unrecognized grouping construct

c# - 性能 StringBuilder Insert 与 string Concat