C#使用Newtonsoft库实现嵌套JSON数组转目标结构方案
基于Newtonsoft.Json的C# JSON结构转换实现
直接使用Newtonsoft.Json内置的LINQ to JSON接口即可完成该结构转换,无需额外依赖其他工具,核心逻辑是将内层存储的FieldName/Value键值对映射为目标对象的属性,转换过程会自动保留字段值的原始类型,不会出现数字、日期类值被强制转成字符串的问题。
完整实现代码
using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 传入待转换的源JSON字符串 string sourceJson = @"[ [ { ""FieldName"": ""Id"", ""Value"": 1234 }, { ""FieldName"": ""FieldName1"", ""Value"": 2722 }, { ""FieldName"": ""FieldName2"", ""Value"": ""2022-06-21T13:03:11.5958542Z"" }, { ""FieldName"": ""FieldName3"", ""Value"": ""XYZ"" } ] ]"; // 解析源JSON为二维数组结构 JArray sourceArr = JArray.Parse(sourceJson); JArray targetArr = new JArray(); foreach (JArray fieldGroup in sourceArr) { JObject targetObj = new JObject(); foreach (JObject field in fieldGroup) { // 以FieldName值为属性名,Value值为属性值构建目标对象 string propName = field["FieldName"].ToString(); JToken propValue = field["Value"]; targetObj.Add(propName, propValue); } targetArr.Add(targetObj); } // 序列化得到最终目标JSON,格式化参数可按需调整 string targetJson = targetArr.ToString(Formatting.Indented);
转换结果验证
上述代码执行后输出的targetJson完全匹配目标结构要求:
[ { "Id": 1234, "FieldName1": 2722, "FieldName2": "2022-06-21T13:03:11.5958542Z", "FieldName3": "XYZ" } ]
适配说明
- 如果源JSON外层数组包含多组内层字段集合,该逻辑会自动生成多个对应的目标对象,无需修改代码
- 支持任意动态FieldName字段,不需要提前定义固定的C#实体类做映射
- 嵌套对象、数组类的复杂Value值也可以正常转换,不会出现结构丢失
内容的提问来源于stack exchange,提问作者Manoj Raut
相关产品推荐
相关产品推荐

