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

C#反序列化JsTree生成的JSON时出现JsonSerializationException如何解决

错误核心原因

  • 你拿到的JSON最外层是数组结构(以[开头]包裹),但你尝试反序列化为单个JsTreeModel对象,类型不匹配触发序列化异常。
  • 原有JsTreeModel的属性类型定义错误:li_attr、a_attr、data都是JSON对象而非字符串,同时缺少树形结构必需的children子节点字段定义。

修正方案

第一步:调整实体类结构

// 对应li_attr字段的结构
public class LiAttr
{
    [JsonProperty("id")]
    public string Id { get; set; }
}

// 对应a_attr字段的结构
public class AAttr
{
    [JsonProperty("href")]
    public string Href { get; set; }
    [JsonProperty("id")]
    public string Id { get; set; }
}

// 修正后的JsTree节点模型
public class JsTreeModel
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }

    // icon可能为布尔值或图标类名字符串,用object兼容两种场景
    [JsonProperty("icon")]
    public object Icon { get; set; }

    [JsonProperty("li_attr")]
    public LiAttr LiAttr { get; set; }

    [JsonProperty("a_attr")]
    public AAttr AAttr { get; set; }

    // 自定义扩展data字段,无固定结构时用字典接收,有固定结构可替换为自定义类
    [JsonProperty("data")]
    public Dictionary<string, object> Data { get; set; }

    // 子节点集合,递归嵌套自身类型实现树形结构
    [JsonProperty("children")]
    public List<JsTreeModel> Children { get; set; }
}

第二步:修改反序列化代码

因为外层是数组,所以要反序列化为List<JsTreeModel>类型:

List<JsTreeModel> treeNodes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<JsTreeModel>>(json);
// 如果确认仅存在一个根节点,可直接取集合第一个元素
JsTreeModel rootNode = treeNodes?.FirstOrDefault();

内容的提问来源于stack exchange,提问作者Eduardo Quezada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:07