zoukankan      html  css  js  c++  java
  • .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"
        }
      ]
  • 相关阅读:
    背水一战 Windows 10 (26)
    背水一战 Windows 10 (25)
    背水一战 Windows 10 (24)
    背水一战 Windows 10 (23)
    背水一战 Windows 10 (22)
    背水一战 Windows 10 (21)
    背水一战 Windows 10 (20)
    背水一战 Windows 10 (19)
    背水一战 Windows 10 (18)
    背水一战 Windows 10 (17)
  • 原文地址:https://www.cnblogs.com/showen/p/15624180.html
Copyright © 2011-2022 走看看