如何在C#中为JSON序列化对象设置动态属性名?
解决C#中JSON序列化动态属性名的问题
嘿,这个问题我太熟悉了!你遇到的核心问题是:C#的匿名对象属性名是编译时固定的,所以不管你变量codfis的值是什么,匿名对象的属性名都会是字符串"codfis";而你尝试的[codfis]语法是C# 6+的对象初始化器扩展,但它不能用在匿名类型上——这就是为什么会报语法错误。
下面给你几个简单可行的解决方案,任选其一就能实现你想要的效果:
方法1:使用Dictionary<string, object>(最推荐)
字典的键会直接被序列化为JSON的属性名,完美适配动态名称的需求:
string codfis = "Example1"; var jsonCF = new Dictionary<string, object> { [codfis] = new { Cognome = vcgm, Nome = vnm, Sesso = ss, LuogoDiNascita = ldn, Provincia = pr, DataDiNascita = ddn } }; using (StreamWriter file = File.CreateText("CodFisCalcolati.json")) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(file, jsonCF); }
运行这段代码后,生成的JSON就会以Example1作为顶层属性名,完全符合你的预期。
方法2:使用ExpandoObject(动态类型方案)
如果你喜欢用动态类型,ExpandoObject也能实现动态属性名:
string codfis = "Example1"; dynamic jsonCF = new ExpandoObject(); jsonCF[codfis] = new { Cognome = vcgm, Nome = vnm, Sesso = ss, LuogoDiNascita = ldn, Provincia = pr, DataDiNascita = ddn }; using (StreamWriter file = File.CreateText("CodFisCalcolati.json")) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(file, jsonCF); }
注意:动态类型在编译时没有类型检查,如果你需要强类型约束,更推荐方法1。
方法3:使用Newtonsoft.Json的JObject(手动构建JSON)
如果你的项目已经引用了Newtonsoft.Json(Json.NET),可以直接用JObject手动构建JSON结构:
string codfis = "Example1"; var jsonCF = new JObject { [codfis] = new JObject { ["Cognome"] = vcgm, ["Nome"] = vnm, ["Sesso"] = ss, ["LuogoDiNascita"] = ldn, ["Provincia"] = pr, ["DataDiNascita"] = ddn } }; File.WriteAllText("CodFisCalcolati.json", jsonCF.ToString());
这种方式对JSON结构的控制更精细,适合需要复杂JSON构建的场景。
内容的提问来源于stack exchange,提问作者Alwe
相关产品推荐
相关产品推荐

