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

如何在C#中将点表示法命名空间字符串列表转为嵌套JSON?

Convert Dot-Notation Namespace Strings to Nested JSON String

看起来你已经搞定了大部分逻辑!针对把点分隔的命名空间字符串列表转成嵌套JSON的需求,我给你整理了更通用的实现思路和代码示例,能适配更深层级的嵌套和更多测试场景:

核心实现思路

  • 将每个字符串按.分割成层级节点数组
  • 从根对象开始,逐层遍历节点,动态创建嵌套的对象结构
  • 当遍历到最后一个节点时,将其添加到父节点对应的数组中(如果父节点还没有数组就新建)

C# 代码示例

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Text.Json;

public class NamespaceToJsonConverter
{
    public static string ConvertToNestedJson(List<string> strings)
    {
        var root = new ExpandoObject();

        foreach (var str in strings)
        {
            var parts = str.Split('.');
            dynamic current = root;

            // 遍历到倒数第二个节点,构建嵌套对象
            for (int i = 0; i < parts.Length - 2; i++)
            {
                var key = parts[i];
                var currentDict = (IDictionary<string, object>)current;
                if (!currentDict.ContainsKey(key))
                {
                    currentDict[key] = new ExpandoObject();
                }
                current = currentDict[key];
            }

            // 处理数组父节点和最后一个元素
            var parentKey = parts[parts.Length - 2];
            var lastElement = parts[parts.Length - 1];
            var parentDict = (IDictionary<string, object>)current;

            // 初始化数组(如果不存在)
            if (!parentDict.ContainsKey(parentKey))
            {
                parentDict[parentKey] = new List<string>();
            }

            // 添加元素到数组
            ((List<string>)parentDict[parentKey]).Add(lastElement);
        }

        // 序列化带缩进的JSON
        return JsonSerializer.Serialize(root, new JsonSerializerOptions { WriteIndented = true });
    }

    // 测试用例
    public static void Main()
    {
        var strings = new List<string> 
        { 
            "example.string.1", 
            "example.string.2", 
            "example.anotherstring.1",
            "demo.layer1.layer2.itemX",
            "demo.layer1.layer2.itemY"
        };

        var resultJson = ConvertToNestedJson(strings);
        Console.WriteLine(resultJson);
    }
}

代码说明

  • 用ExpandoObject动态构建嵌套结构,既可以像字典一样灵活操作,又能直接被JSON序列化
  • 适配任意深度的层级嵌套(比如a.b.c.d.123会被转成{"a":{"b":{"c":{"d":["123"]}}}})
  • 自动处理同一父节点下的多个子元素,将它们收集到数组中
  • 序列化时开启WriteIndented让输出格式更清晰

可选优化点

  • 如果需要避免数组中的重复元素,可以在添加前检查((List<string>)parentDict[parentKey]).Contains(lastElement)
  • 如果最后一个节点不是字符串类型,可以将List<string>改为List<object>或者对应的数据类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:37