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

如何在C#中将MetaData追加到多层Dictionary序列化后的JSON?

没问题,我来帮你搞定这个序列化需求!根据你的描述,这里有几种靠谱的实现方案,你可以根据自己的场景选最合适的:

方案一:创建根类(推荐,类型安全)

这种方式最规范,通过定义一个包含MetaData和表格数据的根类,确保序列化过程的类型安全:

首先,先确认你已有的MetaData类(如果还没完善,参考下面的结构):

public class MetaData
{
    public string Id { get; set; }
    public string CreatedBy { get; set; }
    public string CreatedOn { get; set; }
    public string State { get; set; }
    public string Level { get; set; }
}

然后创建一个根数据类,用来整合MetaData和你的表格字典:

public class RootData
{
    public MetaData MetaData { get; set; }
    public Dictionary<string, string> tbDm { get; set; }
    public Dictionary<string, string> tbCO { get; set; }
}

接下来就是实例化数据并序列化:

// 构造MetaData实例
var metaInfo = new MetaData
{
    Id = "1",
    CreatedBy = "Ravi",
    CreatedOn = "06/01/2018",
    State = "Completed",
    Level = "Curator"
};

// 假设这是你已有的tbDm和tbCO字典数据
var tbDmData = new Dictionary<string, string> { ["textBox1"] = "Ravi", /* 其他键值对 */ };
var tbCOData = new Dictionary<string, string> { ["textBox5"] = "Cha", /* 其他键值对 */ };

// 组装成根对象
var finalData = new RootData
{
    MetaData = metaInfo,
    tbDm = tbDmData,
    tbCO = tbCOData
};

// 序列化生成目标JSON
string targetJson = JsonConvert.SerializeObject(finalData, Formatting.Indented);
方案二:用匿名类型(快速实现,无需新增类)

如果不想额外定义根类,用匿名类型可以快速完成合并,适合临时场景:

// 已有的MetaData实例
var metaInfo = new MetaData { /* 赋值同上 */ };

// 已有的字典集合(包含tbDm和tbCO)
var tableDict = new Dictionary<string, Dictionary<string, string>>
{
    ["tbDm"] = new Dictionary<string, string> { ["textBox1"] = "Ravi" },
    ["tbCO"] = new Dictionary<string, string> { ["textBox5"] = "Cha" }
};

// 用匿名类型包装所有数据
var combinedData = new
{
    MetaData = metaInfo,
    tbDm = tableDict["tbDm"],
    tbCO = tableDict["tbCO"]
};

// 序列化
string targetJson = JsonConvert.SerializeObject(combinedData, Formatting.Indented);
方案三:动态合并JObject(适合动态数据场景)

如果你的表格数据是动态生成的,不确定键名,用Newtonsoft的JObject来动态合并会更灵活:

using Newtonsoft.Json.Linq;

// 序列化MetaData为JObject
JObject metaJObj = JObject.FromObject(metaInfo);

// 序列化表格字典为JObject
JObject tableJObj = JObject.FromObject(tableDict);

// 合并两个JObject(替换重复节点,这里不会有重复)
metaJObj.Merge(tableJObj, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Replace });

// 转换为格式化后的JSON字符串
string targetJson = metaJObj.ToString(Formatting.Indented);

注意事项

  • 确保你已经通过NuGet安装了Newtonsoft.Json包:Install-Package Newtonsoft.Json
  • 如果你的Offlinedta类已经包含tbDm和tbCO属性,直接把它的属性和MetaData合并即可,不需要重新构造字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:22