JSON反序列化失败求助:自定义类与集合类型尝试均无效
问题原因与解决方案
你的JSON数据外层是包含data字段的对象,但data对应的内容不是标准JSON格式,而是逗号分隔的key=xxx, age=xxx字符串,这直接导致你之前的两种反序列化方式失败:
- 用
RootData反序列化:如果你的RootData类中data不是string类型,JsonConvert无法将字符串解析为复杂对象; - 用
List<Dictionary<string, string>>反序列化:整个JSON根节点是对象而非数组,类型完全不匹配。
正确处理步骤
- 定义外层结构类,先把
data作为字符串接收:
public class RootData { public string data { get; set; } }
- 反序列化外层对象,提取
data字段的原始字符串内容:
string jsonStr = "{\"data\":\"key=IAfpK, age=58, key=WNVdi, age=64, key=jp9zt, age=47\"}"; var root = JsonConvert.DeserializeObject<RootData>(jsonStr); string rawData = root.data;
- 手动解析
rawData为目标结构
方式一:解析为List<Dictionary<string, string>>
var keyValuePairs = rawData.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) .Select(kv => kv.Split('=')) .ToList(); var userList = new List<Dictionary<string, string>>(); // 每两组键值对对应一个用户 for (int i = 0; i < keyValuePairs.Count; i += 2) { var userDict = new Dictionary<string, string>(); userDict.Add(keyValuePairs[i][0], keyValuePairs[i][1]); userDict.Add(keyValuePairs[i+1][0], keyValuePairs[i+1][1]); userList.Add(userDict); }
方式二:解析为自定义User类列表
先定义User类:
public class User { public string key { get; set; } public int age { get; set; } }
再完成解析:
var keyValuePairs = rawData.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) .Select(kv => kv.Split('=')) .ToList(); var userList = new List<User>(); for (int i = 0; i < keyValuePairs.Count; i += 2) { userList.Add(new User { key = keyValuePairs[i][1], age = int.Parse(keyValuePairs[i+1][1]) }); }
内容的提问来源于stack exchange,提问作者Vagner Veiga Moreira
相关产品推荐
相关产品推荐

