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

转换JSON-RPC到XML前移除布尔类型false字段的实现方法

解决方案:移除JSON中布尔类型false字段后转换为XML

要实现只移除布尔类型的false值字段,同时保留字符串类型的"false"值,你可以借助Newtonsoft.Json的JObject/JToken API递归遍历并清理JSON结构,步骤如下:

1. 递归清理布尔false属性

编写递归方法遍历JSON的所有节点,识别并移除值为布尔false的属性,嵌套对象和数组也会被深度处理:

using Newtonsoft.Json.Linq;
using System.Collections.Generic;

private static void RemoveBooleanFalseProperties(JToken token)
{
    // 处理对象类型节点
    if (token.Type == JTokenType.Object)
    {
        var propsToRemove = new List<string>();
        foreach (var prop in ((JObject)token).Properties())
        {
            // 判断当前属性值是否是布尔类型且为false
            if (prop.Value.Type == JTokenType.Boolean && (bool)prop.Value == false)
            {
                propsToRemove.Add(prop.Name);
            }
            else
            {
                // 递归处理子节点
                RemoveBooleanFalseProperties(prop.Value);
            }
        }
        // 批量移除标记的属性(避免遍历中修改集合引发异常)
        foreach (var propName in propsToRemove)
        {
            ((JObject)token).Remove(propName);
        }
    }
    // 处理数组类型节点
    else if (token.Type == JTokenType.Array)
    {
        foreach (var item in ((JArray)token))
        {
            RemoveBooleanFalseProperties(item);
        }
    }
}

2. 主流程处理

将原始JSON解析为JObject,调用清理方法后重新序列化为JSON,再转换为XML:

using Newtonsoft.Json;
using System.Xml;

// 你的原始JSON字符串
string originalJson = @"
{
    ""street1"": ""Main St"",
    ""street2"": false,
    ""is_company"": false,
    ""custom_value_1"": ""false"",
    ""contact"": {
        ""name"": ""John"",
        ""is_active"": false,
        ""note"": ""false""
    },
    ""orders"": [
        {
            ""id"": 1,
            ""is_paid"": false,
            ""status"": ""false""
        }
    ]
}";

// 1. 解析JSON为JObject
JObject jsonObject = JObject.Parse(originalJson);

// 2. 清理布尔false属性
RemoveBooleanFalseProperties(jsonObject);

// 3. 序列化为清理后的JSON字符串
string cleanedJson = jsonObject.ToString(Formatting.None);

// 4. 转换为XML文档
XmlDocument xmlDoc = JsonConvert.DeserializeXmlNode(cleanedJson);

逻辑说明

  • 该方法只会匹配JTokenType.Boolean类型且值为false的属性,字符串类型的"false"(JTokenType.String)会被完整保留。
  • 递归处理支持嵌套的对象和数组结构,确保所有层级的布尔false属性都被移除。
  • 批量移除属性是为了避免在遍历JObject属性时直接修改集合,引发枚举异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:05:01