前段时间用.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" } ]