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

如何在C#中实现类似JavaScript的多层多类型嵌套Key=>Value键值结构

C#作为静态类型语言,有多种方式实现你需要的多层嵌套键值结构、支持多类型值、且可通过点语法访问的需求,以下是三种常用方案:

方案1:动态类型实现(最贴合JS写法,无需提前定义结构)

使用ExpandoObject搭配dynamic关键字,可以实现和JS几乎一致的编写和访问体验,适合结构不固定、需要灵活扩展的场景。

注意:需要引入System.Dynamic命名空间,动态类型无编译时类型检查,属性名拼写错误会在运行时报错。

dynamic keyValueArray = new ExpandoObject();

// 嵌套赋值
keyValueArray.key1 = new ExpandoObject();
keyValueArray.key1.key11 = new ExpandoObject();
keyValueArray.key1.key11.key111 = "String1";
keyValueArray.key1.key11.key112 = "String2";
keyValueArray.key1.key11.key113 = "String3";

keyValueArray.key1.key12 = new ExpandoObject();
keyValueArray.key1.key12.key121 = "String4";

keyValueArray.key2 = new ExpandoObject();
keyValueArray.key2.key21 = new ExpandoObject();
keyValueArray.key2.key21.key211 = 1234;

keyValueArray.key3 = "String5";

// 访问方式完全符合你的要求
var value = keyValueArray.key1.key11.key111;
方案2:强类型类实现(适合结构固定的场景)

如果你的结构是固定的,推荐提前定义实体类,可获得编译时类型检查、智能提示等特性,性能也优于动态类型。

// 提前定义层级结构类
public class Root
{
    public Key1Class key1 { get; set; }
    public Key2Class key2 { get; set; }
    public string key3 { get; set; }
}

public class Key1Class
{
    public Key11Class key11 { get; set; }
    public Key12Class key12 { get; set; }
}

public class Key11Class
{
    public string key111 { get; set; }
    public string key112 { get; set; }
    public string key113 { get; set; }
}

public class Key12Class
{
    public string key121 { get; set; }
}

public class Key2Class
{
    public Key21Class key21 { get; set; }
}

public class Key21Class
{
    public int key211 { get; set; }
}

初始化和访问示例:

var keyValueArray = new Root
{
    key1 = new Key1Class
    {
        key11 = new Key11Class
        {
            key111 = "String1",
            key112 = "String2",
            key113 = "String3"
        },
        key12 = new Key12Class
        {
            key121 = "String4"
        }
    },
    key2 = new Key2Class
    {
        key21 = new Key21Class
        {
            key211 = 1234
        }
    },
    key3 = "String5"
};

var value = keyValueArray.key1.key11.key111;
方案3:JSON反序列化快速构建

如果已经有JSON格式的结构数据,可直接通过JSON序列化工具反序列化为动态对象,无需手动逐层赋值,以下是Newtonsoft.Json的示例:

string jsonStr = @"{
    ""key1"": {
        ""key11"": {
            ""key111"": ""String1"",
            ""key112"": ""String2"",
            ""key113"": ""String3""
        },
        ""key12"": {
            ""key121"": ""String4""
        }
    },
    ""key2"": {
        ""key21"": {
            ""key211"": 1234
        }
    },
    ""key3"": ""String5""
}";

dynamic keyValueArray = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonStr);
var value = keyValueArray.key1.key11.key111;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:54:00