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"
        }
      ]
  • 相关阅读:
    php的语句
    php
    git分支
    git安装及git命令的用法
    git命令
    dos命令及github介绍
    无缝轮播的案例 及css3无缝轮播案例
    ACWING 031 表示数值的字符串
    Acwing 282. 石子合并 区间dp
    Leetcode 841. 钥匙和房间 dfs bfs
  • 原文地址:https://www.cnblogs.com/showen/p/15624180.html
Copyright © 2011-2022 走看看