.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"
    }
  ]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM