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

C# 10中使用StringWriter、StringReader与XmlSerializer序列化/反序列化XML的属性及元素文本值

解决XML元素文本内容的序列化/反序列化问题

嘿,这个问题我太熟悉了!你已经搞定了XML属性的映射,但元素内部的文本值需要借助[XmlText]特性来处理,我给你调整一下你的OtherInfo类:

[Serializable]
public class OtherInfo
{
    [XmlAttribute(AttributeName = "name")]
    public string Name { get; set; }
    
    [XmlAttribute(AttributeName = "type")]
    public string Type { get; set; }
    
    // 用[XmlText]标记这个属性,对应XML元素的内部文本内容
    [XmlText]
    public string TextContent { get; set; }

    public OtherInfo() { }
    
    public OtherInfo(string name, string type) => (Name, Type) = (name, type);
    
    // 可以加个重载构造函数,方便一次性初始化所有内容
    public OtherInfo(string name, string type, string textContent) 
        => (Name, Type, TextContent) = (name, type, textContent);
}

关键说明:

  • [XmlText]特性是专门用来告诉XmlSerializer,这个属性对应XML元素的内部文本节点,完美匹配你需求里的Hello World!!!部分。
  • 这个属性的名字可以随便取(比如我这里用了TextContent),只要加上[XmlText]标记就行。

测试示例

序列化(对象转XML)

var info = new OtherInfo("Some Name", "text", "Hello World!!!");
var serializer = new XmlSerializer(typeof(OtherInfo));

using (var writer = new StringWriter())
{
    serializer.Serialize(writer, info);
    Console.WriteLine(writer.ToString());
}

运行后会输出你需要的XML:

<OtherInfo name="Some Name" type="text">Hello World!!!</OtherInfo>

反序列化(XML转对象)

var xmlContent = @"<OtherInfo name=""Some Name"" type=""text"">Hello World!!!
</OtherInfo>";
var serializer = new XmlSerializer(typeof(OtherInfo));

using (var reader = new StringReader(xmlContent))
{
    var info = (OtherInfo)serializer.Deserialize(reader);
    Console.WriteLine($"Name: {info.Name}, Type: {info.Type}, Text: {info.TextContent}");
}

运行后会输出:Name: Some Name, Type: text, Text: Hello World!!!(注意原XML里的换行也会被保留在TextContent里,如果不需要可以额外处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:08:14