C# .NET4.7中无Schema JSON的字符串转JSON数组问题
解决方案(用Newtonsoft.Json处理动态JSON)
因为无法映射固定C#对象,直接使用Newtonsoft.Json.Linq中的JObject动态操作JSON是最优方案,.NET 4.7完全兼容该库(需通过NuGet安装Newtonsoft.Json包)。
实现步骤
- 将原始JSON加载为
JObject,实现无Schema的动态字段访问 - 提取
items字段的字符串值,按|和^的规则分割为二维字符串数组 - 将分割后的数组包装为
JArray,替换原items字段 - 序列化回JSON字符串,得到真正的数组结构
代码示例
using Newtonsoft.Json.Linq; using System; using System.Linq; class Program { static void Main() { // 示例原始JSON(含动态字段) string originalJson = @" { ""randomField1"": ""demo"", ""items"": ""apple^red|banana^yellow|orange^orange"", ""randomField2"": 456 }"; // 1. 加载JSON为JObject JObject jsonObj = JObject.Parse(originalJson); // 2. 检查并提取items字段的字符串值 if (jsonObj["items"] is JValue itemsValue && itemsValue.Type == JTokenType.String) { string itemsStr = itemsValue.Value<string>(); // 3. 按规则分割成二维数组:先按|拆分外层元素,再按^拆分内层元素 string[][] itemsArray = itemsStr.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .Select(outerItem => outerItem.Split(new[] { '^' }, StringSplitOptions.RemoveEmptyEntries)) .ToArray(); // 4. 将二维数组转为JArray,替换原items字段 jsonObj["items"] = JArray.FromObject(itemsArray); } // 5. 序列化回JSON字符串,此时items为标准JSON数组 string processedJson = jsonObj.ToString(); Console.WriteLine(processedJson); } }
关键说明
StringSplitOptions.RemoveEmptyEntries用于过滤分割产生的空元素(比如首尾分隔符、连续分隔符的情况),如果需要保留空元素可移除该参数- 使用
JObject操作不会破坏JSON中的其他动态字段,仅修改items字段 - 最终输出的
items是真正的JSON数组结构,而非字符串形式的数组
内容的提问来源于stack exchange,提问作者Biri
相关产品推荐
相关产品推荐

