You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML反序列化问题:如何匹配小写<product>元素与Product类

解决XmlSerializer大小写不匹配的反序列化问题

针对类名(Product)与XML元素名(<product>)大小写不匹配导致的反序列化失败问题,以下是无需修改类名或XML内容的解决方案,分场景说明:

场景1:<product>是XML根元素

如果你的XML结构以<product>为根,比如:

<product>
  <name>Wireless Headphones</name>
  <price>199.99</price>
</product>

给Product类添加[XmlRoot("product")]特性即可,同时确保类为public(XmlSerializer仅处理public类型):

using System.Xml.Serialization;
using System.IO;

[XmlRoot("product")]
public class Product
{
    // 若XML子元素也是小写,需给属性加[XmlElement],比如<name>对应Name属性
    [XmlElement("name")]
    public string Name { get; set; }
    
    [XmlElement("price")]
    public decimal Price { get; set; }
}

// 反序列化实现
public Product DeserializeProductXml(string xmlContent)
{
    var serializer = new XmlSerializer(typeof(Product));
    using var stringReader = new StringReader(xmlContent);
    return (Product)serializer.Deserialize(stringReader);
}

如果之前加[XmlRoot]无效,检查是否误在反序列化时手动指定了错误的根元素名称,或者类的访问修饰符非public。

场景2:<product>是XML中的子元素

如果XML根元素是集合容器(比如<products>),内部包含多个<product>子元素,比如:

<products>
  <product>
    <name>Keyboard</name>
    <price>49.99</price>
  </product>
  <product>
    <name>Mouse</name>
    <price>29.99</price>
  </product>
</products>

需要定义一个根类,在集合属性上标记[XmlElement("product")]来指定子元素名称:

[XmlRoot("products")]
public class ProductCollection
{
    [XmlElement("product")]
    public List<Product> Items { get; set; } = new List<Product>();
}

public class Product
{
    [XmlElement("name")]
    public string Name { get; set; }
    
    [XmlElement("price")]
    public decimal Price { get; set; }
}

// 反序列化实现
public ProductCollection DeserializeProductsXml(string xmlContent)
{
    var serializer = new XmlSerializer(typeof(ProductCollection));
    using var stringReader = new StringReader(xmlContent);
    return (ProductCollection)serializer.Deserialize(stringReader);
}

以上两种方案都无需修改原有类名或XML元素,仅通过添加XML序列化特性即可解决大小写不匹配问题。

内容的提问来源于stack exchange,提问作者RandomUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:15:42