前段時間用.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" } ]
