• .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"
        }
      ]
  • 相关阅读:
    Crazyflie 2.0 System Architecture
    HDU 4856 Tunnels(BFS+状压DP)
    scp报错:Host key verification failed. REMOTE HOST IDENTIFICATION HAS CHANGED!
    HDU 4175 Class Schedule (暴力+一点dp)
    正則表達式
    匿名訪问之(一)web application级别
    Android UI布局之TableLayout
    cocos2d-x-3.3rc2-003 cocos中的引用计数和自己主动释放池
    一步一步跟我学习hadoop(7)----hadoop连接mysql数据库运行数据读写数据库操作
    hdu Swipe Bo(bfs+状态压缩)错了多次的题
  • 原文地址:https://www.cnblogs.com/showen/p/15624180.html
Copyright © 2020-2023  润新知