• .net Core Newtonsoft.Json 解析巨坑之注释影响代码


    前段时间用.net core写的一个代码,用Json配置的,后面由于配置发生变化,然后将原来的配置注释后,增加新的注释,一句没有动的好好的代码跑不起来了,真是那什么了狗了!

    原来好好的取值方法

    shopsetting.Value<string>("groupName")

    取不到值,还报错!

    System.InvalidOperationException:“Cannot access child value on Newtonsoft.Json.Linq.JValue.”

    经过仔细对比,以前的通过JsonPath拿到的对像是JToken,现在一看怎么变成Jarray了,一度自我怀疑,某个时间点变化了Newtonsoft.Json的版本号,又去查询官网的方法,通过.SelectToken("shops")获取到的数据就是JToken!

    再看看获取的JArray的元素,发现居然是shops下面的子节点,而不是shops本身,Parent才是我想要的节点,what?把Parent的Json文本取出来解析,居然报语法错?仔细查看,原来是包含了注释,这特喵的什么鬼?注释不应该是自动去掉的吗?

    然后我再去配置文件中把注释去掉,发现代码正常了!

    原来visual studio觉得那是注释,Newtonsoft.Json解析时是不会认为那是注释而去掉的,影响解析结果,但查询对象,则不包含该注释的对像。

    没有注释.SelectToken("shops")的结果是JToken对象,增加了注释,.SelectToken("shops")的结果是JArray,而且获取的文档层次不对了。

    看来,注释也不能随意添加,害人不浅呀,这点注释浪费我2小时时间。

      "shops": [
        //{
        //  "groupName": "士强",
        //  "shopName": "曲阳",
        //  "key": "pnijwkwVMbAYbXl1Kt+rBG7SZoA",
        //  "uniqueNo": "310110",
        //  "AK": "e7ec2742cad4432d9700",
        //  "SK": "y8ONI4Ifx4iWr"
        //},
        {
          "groupName": "士明",
          "shopName": "万达,老街,三号湾,宋园,徐泾",
          "key": "G9w0BAQEFAASCAmAwg",
          "uniqueNo": "310151R881",
          "AK": "7700ed67ab44487",
          "SK": "SS7KRdL4ltd7"
        }
      ]
  • 相关阅读:
    stl的erase()陷阱--迭代器失效总结
    .NET Framework 概述
    C#在代码中编写输出debug信息-类Debug的使用
    C# 开发的windows服务 不能调试——讨论整理
    C#开发windows服务如何调试——资料整理
    iis深入学习资源
    网站因权限问题报错
    数据库建表经验总结——建表现象—sql查询疑惑
    java8大基本类型
    存储过程中的事务
  • 原文地址:https://www.cnblogs.com/showen/p/15624180.html
Copyright © 2020-2023  润新知