• 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>

    至此完事。

  • 相关阅读:
    uu 模块
    程序员都是好男人
    TCP基础知识
    最全 git 命令总结
    iOS 添加UIWindow不显示问题解决
    解决CFBundleIdentifier", Does Not Exist
    Mac 系统OS X>=10.9,怎么把默认的python切换成3.7或者更高
    OC算法练习-Hash算法
    设计模式架构模式
    runtime相关知识
  • 原文地址:https://www.cnblogs.com/masonblog/p/9513902.html
Copyright © 2020-2023  润新知