这应该一定是.Net的bug了

文章描述了在使用DataContractJsonSerializer进行Json序列化和反序列化时遇到的问题。在不同机器上行为不一致,出现“k__BackingField”字符,并且在机器A上出现了XmlException,指出名称不能以十六进制值0x3C(<字符)开头。作者认为这可能是.NET的bug,并分享了错误的Json源文。解决方案尚未详述,但提到了使用第三方软件牛顿软件来解决此问题。
摘要由CSDN通过智能技术生成

使用DataContractJsonSerializer进行序列化和反序列化成Json的bug

首先解析的类分加和不加[DataContract]、[Serializable]特性总共4种情况。

在一台电脑上序列化完成会有“k__BackingField”字符的情况,网上说去掉[Serializable]就可以,但现在我这边情况是一台电脑A去不去都没有该字符,一台电脑B是去不去都有,所以这个肯定是bug。

最有意思的是那台有问题的机器A在一开始前是没有问题的,它的代码也是从B拷过去的,但是它也有这个标记,不记得后来我怎么操作了,现在也有问题了,不管加什么特性,都不会再有这“k__BackingField”字符串了。

有意思第二件事又出来了,就是A,在后续解析的时候又出现了一个莫须有的错误,见图:

 

 

错误内容:System.Xml.XmlException:“名称不能以“<”字符(十六进制值 0x3C)开头。此异常最初是在此调用堆栈中引发的: System.Xml.XmlConvert.VerifyNCName(string, System.Xml.ExceptionType)

以下是Json源文。 

{"ID":0,"Name":null,"Actions":[{"ID":1,"Name":"突发火灾报警","ASID":1,"ActionID":1,"ChuLiRen":null,"ControlDepands":[],"DetectionData":0,"Diagnosis":"","Duration":60,"IntComplete":0,"IsNecessary":false,"IsUIControl":false,"NormalDataMax":null,"NormalDataMin":null,"OtherPara":null,"PlaceInfo":null,"PreActionID":[],"Runing":false,"StartTime":0,"Status":0,"StopTime":0},{"ID":2,"Name":"12119平台接警","ASID":1,"ActionID":2,"ChuLiRen":null,"ControlDepands":[],"DetectionData":0,"Diagnosis":"","Duration":60,"IntComplete":0,"IsNecessary":false,"IsUIControl":false,"NormalDataMax":null,"NormalDataMin":null,"OtherPara":null,"PlaceInfo":null,"PreActionID":[],"Runing":false,"StartTime":60,"Status":0,"StopTime":0}],"TimeQuantum":0}

哪他妈有'<'字符串啊,居然报这个错误,所以说嘛这个肯定是.Net的bug。 

当然这个问题可以定位,但是我懒啊,发布出来大家看下戏,而我还是采用牛顿软件来解决这问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值