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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:18:33