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

C#使用XmlSerializer解析XML时如何将DataObject节点内容转为字符串

解决方案

你可以通过 XmlAnyElementAttribute 捕获 DataObject 节点的完整内容,再读取节点的 InnerXml 属性实现需求,无需修改反序列化逻辑,仅调整 BaseResponse 类的特性标记即可:

第一步:修改BaseResponse类定义

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

public class BaseResponse
{
    // 兼容第二个示例中的<Status>节点,如果确定只有<StatusCode>可以去掉多余的ElementName配置
    [XmlElement(ElementName = "StatusCode")]
    [XmlElement(ElementName = "Status")]
    public int StatusCode { get; set; }
    
    public string Text { get; set; }

    // 捕获名称为DataObject的完整XML节点,不解析内部结构
    [XmlAnyElement("DataObject")]
    public XmlElement DataObjectRaw { get; set; }

    // 对外暴露的字符串属性,不参与序列化反序列化
    [XmlIgnore]
    public string DataObject 
    { 
        get
        {
            if (DataObjectRaw == null) return string.Empty;
            // 如需保留原始缩进换行可去掉Trim()
            return DataObjectRaw.InnerXml.Trim();
        }
        set
        {
            // 若需要序列化回XML可在此实现set逻辑,仅反序列化场景可忽略
        }
    }

    public static BaseResponse Get(string xmlResponse)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(BaseResponse));
        using (StringReader reader = new StringReader(xmlResponse))
        {
            return (BaseResponse)serializer.Deserialize(reader);
        }
    }
}

实现说明

  • [XmlAnyElement("DataObject")] 会让XmlSerializer将匹配名称的节点完整映射为XmlElement对象,不会递归解析内部子节点,不管节点内容是纯文本还是嵌套XML都能完整保留
  • 调用XmlElement.InnerXml即可直接拿到节点内的全部内容:
    • 纯文本场景下返回原始文本字符串
    • 嵌套子节点场景下返回所有子节点的完整XML字符串,完全符合要求的输出格式
  • 类中对StatusCode添加了两个XmlElement标记,可以同时兼容两个示例中出现的<StatusCode>和<Status>两种节点名称,不需要兼容可删除多余配置

效果验证

  1. 纯文本DataObject场景:返回值为1111-1111-2222-121212-12121
  2. 嵌套子节点场景:返回值为<DetailStatus><Author>Peter</Author><DateCreated>21.08.2021 19:00:05</DateCreated></DetailStatus>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:05