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

JSON反序列化失败求助:自定义类与集合类型尝试均无效

问题原因与解决方案

你的JSON数据外层是包含data字段的对象,但data对应的内容不是标准JSON格式,而是逗号分隔的key=xxx, age=xxx字符串,这直接导致你之前的两种反序列化方式失败:

  • 用RootData反序列化:如果你的RootData类中data不是string类型,JsonConvert无法将字符串解析为复杂对象;
  • 用List<Dictionary<string, string>>反序列化:整个JSON根节点是对象而非数组,类型完全不匹配。

正确处理步骤

  1. 定义外层结构类,先把data作为字符串接收:
public class RootData
{
    public string data { get; set; }
}
  1. 反序列化外层对象,提取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;
  1. 手动解析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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:02:44