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

如何反序列化XML提取标签数据并映射至自定义C#类?

解决XML反序列化到PassengerDetails类的问题

你可以通过调整类的序列化特性,配合.NET自带的XmlSerializer完成XML字符串到自定义类的反序列化,具体步骤如下:

1. 调整PassengerDetails类,匹配XML节点

由于XML根节点是<Passenger>(与类名PassengerDetails不符),且<cardNumber>标签和类属性CardNumber大小写不一致,需要添加序列化特性显式映射:

using System.Xml.Serialization;

[XmlRoot("Passenger")] // 指定XML根节点名称
public class PassengerDetails
{
    public PassengerDetails() { } // 必须保留无参构造函数,序列化要求

    public string Name { get; set; }
    public string Email { get; set; }

    [XmlElement("cardNumber")] // 映射XML中的小写cardNumber标签
    public string CardNumber { get; set; }
}

2. 编写反序列化代码

利用XmlSerializer将XML字符串转换为PassengerDetails实例,注意XML编码为utf-16,C#字符串默认采用UTF-16编码,直接用StringReader即可处理:

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

// 假设XML字符串已存储在RequestPassengerXML变量中
string RequestPassengerXML = @"<?xml version=""1.0"" encoding=""utf-16""?>
<Passenger xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
<Name>John Vaz</Name>
<Email>john@gmail.com</Email>
<cardNumber>CB2390VT</cardNumber>
</Passenger>";

// 创建序列化器实例
XmlSerializer serializer = new XmlSerializer(typeof(PassengerDetails));

// 读取XML字符串并反序列化
using (StringReader reader = new StringReader(RequestPassengerXML))
{
    PassengerDetails passenger = (PassengerDetails)serializer.Deserialize(reader);

    // 此时可直接访问类成员
    // 示例:输出提取到的信息
    Console.WriteLine($"姓名:{passenger.Name}");
    Console.WriteLine($"邮箱:{passenger.Email}");
    Console.WriteLine($"卡号:{passenger.CardNumber}");
}

核心注意点

  • 类必须保留公共无参构造函数,XmlSerializer依赖它创建实例。
  • 当XML节点与类属性名称(含大小写)不匹配时,必须用XmlRoot、XmlElement等特性做映射,否则对应属性会被赋值为null。
  • XML中的命名空间不影响属性匹配,无需额外处理即可正常提取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:30:43