zoukankan      html  css  js  c++  java
  • 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>

    至此完事。

  • 相关阅读:
    SQL JOIN
    string.Empty, "" 和 null 三者的区别
    java JDBC
    java 自定义注解
    Spring Bean自动检测
    Spring Aware接口
    IObservable 接口
    CloseHandle()函数的使用
    [置顶] 记一次讲座与前辈的对话
    让用户关上门说话:覆盖全美6000个社区的邻居私密社交网站Nextdoor是如何壮大的?
  • 原文地址:https://www.cnblogs.com/masonblog/p/9513902.html
Copyright © 2011-2022 走看看