如何在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
相关产品推荐
相关产品推荐

