Json转换值类型字段为空字符串时报错问题


问题

在写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>

 

至此完事。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM