.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"
    }
  ]
原文地址:https://www.cnblogs.com/showen/p/15624180.html