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

使用Newtonsoft解析JSON失败:需从字符串函数中反序列化指定JSON

我来帮你搞定这个Newtonsoft.Json反序列化的问题!先梳理下核心问题:你提供的JSON片段其实是数组格式,但可能提取时漏了外层的[],再加上需要先从JavaScript代码里精准抠出纯JSON内容,配合对应实体类才能顺利反序列化。下面是分步解决方案:

步骤1:提取合法的JSON片段

从你的JS代码里,把chart.addSeries第二个参数里的数组完整取出来,这才是符合规范的JSON:

[{"name":"FC Internazionale Milano","y":55},{"name":"AC Chievo Verona","y":45,"sliced":true}]

⚠️ 注意外层的[]绝对不能丢——没有它的话,这段内容只是两个独立的JSON对象,不是合法的可反序列化结构。

步骤2:定义匹配的C#实体类

根据JSON的字段结构,创建一个对应的实体类,其中sliced是可选字段,用可空布尔值处理最稳妥:

public class PieChartItem
{
    public string name { get; set; }
    public int y { get; set; }
    public bool? sliced { get; set; } // 可选字段,可空类型适配"存在/不存在"两种情况
}

如果希望sliced默认值为false,也可以改成public bool sliced { get; set; } = false;,Newtonsoft会自动为缺失该字段的对象赋值默认值。

步骤3:执行反序列化操作

用Newtonsoft.Json的核心方法完成反序列化,这里给你写好完整的可运行代码:

using Newtonsoft.Json;
using System.Collections.Generic;

// 假设你已经提取到正确的JSON字符串(注意C#里字符串的转义,用@符号可以避免双引号转义)
string validJson = @"[{""name"":""FC Internazionale Milano"",""y"":55},{""name"":""AC Chievo Verona"",""y"":45,""sliced"":true}]";

try
{
    List<PieChartItem> chartData = JsonConvert.DeserializeObject<List<PieChartItem>>(validJson);
    // 反序列化成功,这里可以处理数据了
    foreach (var item in chartData)
    {
        Console.WriteLine($"球队:{item.name},控球率:{item.y}%,是否切片显示:{item.sliced ?? false}");
    }
}
catch (JsonException ex)
{
    // 捕获异常方便排查问题
    Console.WriteLine($"反序列化失败:{ex.Message}");
}
常见坑点排查
  • JSON格式不合法:如果还是失败,先校验JSON语法——比如VS里粘贴JSON会自动提示错误,或者检查是否有多余逗号、引号不匹配的情况。
  • 实体类字段不匹配:Newtonsoft默认大小写敏感,如果JSON里是小写键,实体类属性也要对应小写;如果想忽略大小写,可以在反序列化时加配置:
    var settings = new JsonSerializerSettings
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver()
    };
    var chartData = JsonConvert.DeserializeObject<List<PieChartItem>>(validJson, settings);
    
  • JS字符串转义问题:如果是直接从JS代码里读取JSON,要注意处理转义字符——比如JS里的双引号在C#字符串里需要转义为"",或者用@符号包裹字符串避免手动转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:58