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

请求协助将指定XML文档反序列化为AddressBook

如何反序列化你的AddressBook XML文档?

嘿,我懂你那种查了一堆资料越看越乱的感觉——一会儿是序列化方法,一会儿是无关的流程,本来该忽略但又因为急着解决问题不得不硬着头皮看。别慌,针对你给出的这个AddressBook XML,我来给你捋清楚怎么高效完成反序列化。

首先,先明确你要处理的XML结构(片段):

<?xml version="1.0" encoding="UTF-8"?>
<AddressBook>
  <Contact>
    <Name>Steve Man</Name>
    <ContactType>Family</ContactType>
    <DateofBirth>1992-07-10T00:00:00</DateofBirth>
    <!-- 省略其他Contact节点或属性 -->
  </Contact>
</AddressBook>

第一步:创建匹配XML结构的实体类

反序列化的核心是让代码里的类结构和XML节点一一对应,我们可以用C#的XmlSerializer特性来映射:

using System.Collections.Generic;
using System.Xml.Serialization;

// 映射XML根节点<AddressBook>
[XmlRoot("AddressBook")]
public class AddressBook
{
    // 映射多个<Contact>节点,用XmlElement指定节点名,避免生成额外的包裹节点
    [XmlElement("Contact")]
    public List<Contact> Contacts { get; set; } = new List<Contact>();
}

// 映射<Contact>节点
public class Contact
{
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("ContactType")]
    public string ContactType { get; set; }

    // 虽然XML里是DateofBirth,类里用更规范的DateOfBirth,用特性指定对应节点名
    [XmlElement("DateofBirth")]
    public DateTime DateOfBirth { get; set; }
}

第二步:编写反序列化代码

接下来用XmlSerializer来读取XML文件或字符串,转换成实体类对象:

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

public static class XmlHelper
{
    // 从XML文件反序列化
    public static AddressBook DeserializeFromFile(string xmlFilePath)
    {
        var serializer = new XmlSerializer(typeof(AddressBook));
        
        using (var fileStream = new FileStream(xmlFilePath, FileMode.Open, FileAccess.Read))
        {
            return (AddressBook)serializer.Deserialize(fileStream);
        }
    }

    // 从XML字符串反序列化(如果你的XML是内存中的字符串)
    public static AddressBook DeserializeFromString(string xmlContent)
    {
        var serializer = new XmlSerializer(typeof(AddressBook));
        
        using (var stringReader = new StringReader(xmlContent))
        {
            return (AddressBook)serializer.Deserialize(stringReader);
        }
    }
}

一些关键注意事项

  • 确保实体类的特性和XML节点名完全匹配,比如DateofBirth节点不能写错成DateOfBirth(除非用特性指定)
  • 如果XML里有多个Contact节点,必须用List<Contact>来接收,并且加上[XmlElement("Contact")],否则XmlSerializer会自动生成一个<Contacts>包裹节点,和你的原始XML结构不匹配
  • 你的日期是标准ISO格式,DateTime类型可以直接解析,不需要额外处理格式
  • 记得在项目里引用System.Xml和System.Xml.Serialization程序集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:54