You need to enable JavaScript to run this app. 在VB.NET中使用Newtonsoft序列化DataSet生成JSON校验失败的问题
优惠活动
大模型
产品
解决方案
定价
更多

在VB.NET中使用Newtonsoft序列化DataSet生成JSON校验失败的问题

报错核心原因
  • 触发解析失败的直接诱因:你待校验的JSON字符串里混入了中文全角标点,对应报错位置"teamid":1",里的逗号是全角的,,不是JSON标准要求的英文半角逗号,。这类非标准符号会直接打断解析流程,让解析器在期待合法分隔符的位置碰到无法识别的字符块,进而抛出“期望出现EOF、}、:、,、]标识,但实际遇到了STRING类型内容”的错误。
  • 代码逻辑的根本性错位:你循环里逐行映射、判空过滤的目标是PlayerTable,但最终序列化时却传入了原始数据源dt,等于前面所有的列名映射、空行过滤逻辑完全没有生效。从你给出的序列化结果也能验证这个问题:你代码里手动定义的列名是Team_Name、Player_Name、Pens,但序列化输出的列名却是name、name1、penalties,完全是原始dt的表结构,和你构造的PlayerTable不匹配。
  • 高频踩坑的转义问题:如果字符串赋值时没有对内容里的双引号、换行、反斜杠做转义处理,或者在把序列化结果存入变量、传输的过程中,手动给JSON字符串两端加了多余引号、把内部的转义符\"替换成了普通双引号,也会导致JSON结构被破坏,触发解析报错。
可直接落地的修正步骤
  • 修正序列化目标对象:将原代码中JsonConvert.SerializeObject(dt)改为JsonConvert.SerializeObject(PlayerTable),确保序列化的是你手动维护列名、过滤有效数据的目标表,而非原始未处理的源表dt。
  • 逐字符核对JSON字符串的标点符号:把所有全角的逗号、冒号、引号替换成英文半角的标准JSON标点,校验时不要直接复制带中文标点的片段,避免格式干扰。
  • 配置合理的序列化参数,减少转义异常:
    var serializeConfig = new JsonSerializerSettings
    {
        StringEscapeHandling = StringEscapeHandling.Default,
        NullValueHandling = NullValueHandling.Ignore,
        Formatting = Formatting.None
    };
    JsonString = JsonConvert.SerializeObject(PlayerTable, serializeConfig);
    
  • 排查传输环节的结构损坏:不要手动给已生成的合法JSON字符串两端拼接多余引号,也不要在日志输出、参数传递的过程中篡改字符串内部的转义字符,避免原本合法的结构被拆碎。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:54:03