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

C#中XML转JSON:如何使decimal节点值不带引号输出

解决XML转JSON时decimal节点保留数值类型的问题

方法1:修改XML节点添加类型属性(原生支持,推荐)

Newtonsoft.Json的SerializeXmlNode支持通过XML的xsi:type属性识别数据类型,你需要给<decimal>节点添加类型声明并引入对应命名空间:

修改后的XML:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <decimal xsi:type="xsd:decimal">12.55</decimal>
  <string>Test</string>
</root>

使用原代码转换即可得到预期结果:

var result = JsonConvert.SerializeXmlNode(Doc, Newtonsoft.Json.Formatting.Indented, true);

输出的JSON:

{
  "decimal": 12.55,
  "string": "Test"
}

方法2:序列化后手动修正JSON类型(无需修改原始XML)

如果无法修改XML结构,可以先序列化得到JSON字符串,再解析为JObject手动转换字段类型:

// 1. 初始序列化得到带字符串类型的JSON
string rawJson = JsonConvert.SerializeXmlNode(Doc, Newtonsoft.Json.Formatting.Indented, true);
JObject jsonObj = JObject.Parse(rawJson);

// 2. 转换decimal字段为数值类型
if (jsonObj.TryGetValue("decimal", out JToken decimalToken) && decimalToken.Type == JTokenType.String)
{
    if (decimal.TryParse(decimalToken.ToString(), out decimal decValue))
    {
        jsonObj["decimal"] = decValue;
    }
}

// 3. 输出最终JSON
string finalJson = jsonObj.ToString(Newtonsoft.Json.Formatting.Indented);

方法3:自定义XmlNodeConverter(批量处理场景)

如果需要批量处理大量同结构XML,可以自定义转换器,自动识别指定节点并转换类型:

public class CustomXmlConverter : XmlNodeConverter
{
    protected override void WriteElementContent(JsonWriter writer, XmlNode node)
    {
        // 识别decimal节点并转换为数值类型
        if (node.Name.Equals("decimal", StringComparison.OrdinalIgnoreCase) 
            && decimal.TryParse(node.InnerText, out decimal value))
        {
            writer.WriteValue(value);
            return;
        }
        // 其他节点按默认逻辑处理
        base.WriteElementContent(writer, node);
    }
}

使用方式:

var settings = new JsonSerializerSettings
{
    Formatting = Newtonsoft.Json.Formatting.Indented,
    Converters = new List<JsonConverter> { new CustomXmlConverter() }
};
string finalJson = JsonConvert.SerializeObject(Doc, settings);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:15:32