.NET Core中使用NewtonJson序列化时移除字典外层属性名
解决NewtonJson字典属性平级序列化问题
问题核心:你当前代码把employees字典作为匿名类的单独属性,导致序列化后生成"employees"嵌套节点,而你需要将字典内的键值对直接和Id平级输出。
解决方法一:用ExpandoObject合并属性
public string GetCompany(Dictionary<string, Employee> employees) { dynamic companyObj = new ExpandoObject(); companyObj.Id = "1393"; var expandoDict = (IDictionary<string, object>)companyObj; // 将字典中的员工键值对逐一添加到对象中 foreach (var emp in employees) { expandoDict.Add(emp.Key, emp.Value); } return JsonConvert.SerializeObject(companyObj, Formatting.Indented); }
解决方法二:用JObject直接构建目标结构
public string GetCompany(Dictionary<string, Employee> employees) { var companyObj = new JObject(); companyObj["Id"] = "1393"; // 把每个员工对象转成JObject后添加到根节点 foreach (var emp in employees) { companyObj[emp.Key] = JObject.FromObject(emp.Value); } return companyObj.ToString(Formatting.Indented); }
原代码不符合预期的原因
原代码里的匿名类new { Id = "1393", employees }是C#语法糖,等价于new { Id = "1393", employees = employees },会给匿名类生成名为employees的属性,因此序列化后字典内容会被嵌套在"employees"节点下,无法平级展开。
内容的提问来源于stack exchange,提问作者david james
相关产品推荐
相关产品推荐

