问题
在写Webservices时,碰到的问题。
定义的类
public class User { public string sID { get; set; } public int? iAge { get; set; } public string sName { get; set; } }
(1)当iAge为非空值
string strJson = "{"sID": "b52c5343-bb34-48ed-8820-ef21f33688a0","iAge": "3","sName": "LiLei"}";
结果:正常解析。三个字段都有值。
(2)当iAge字段未传递时
string strJson = "{"sID": "b52c5343-bb34-48ed-8820-ef21f33688a0","sName": "LiLei"}";
结果:正常解析。sID和sName有值,iAge字段为NULL。
(3)当iAge字段为空字符串时
string strJson = "{"sID": "b52c5343-bb34-48ed-8820-ef21f33688a0","iAge": "","sName": "LiLei"}";
结果:解析失败。
提示:参数解析出错!Could not convert string to integer: . Line 136, position 32.
(4)问题:
明明iAge字段为int?,是可以赋值为NULL的啊。
自己写了个控制台进行测试,结果是以上的三种情况都能正常解析。
百思不得其解,于是请教大佬。
原因
大佬一语道破,Newtonsoft.Json版本的原因。
工作项目使用的是4.0.8,我创建的控制台项目使用的是9.0.1。
大佬给的说明,我是看不懂。我工作项目中使用的版本不支持转换空的值类型吧。
于是,寻找版本:
地址:https://www.nuget.org/packages/Newtonsoft.Json/
使用的是 Newtonsoft.Json -Version 8.0.3 版本。
将工作项目中的dll文件进行了替换。
后续问题
替换后,就发布了一个版本。
然而,又报错了。
原因:使用了更高版本的dll文件。
解决:
在web.config的<runtime></runtime>节点中,添加以下内容。
<dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly>
至此完事。