删除反序列化 Web API 2 C# 中的 NaN 值

2024-03-24

您好,我想知道是否有人可以帮助我,我正在尝试在 Web API 2 中自动反序列化时自动将双值中的 NaN 替换为 0。我正在尝试使用 JSON.NET,但没有成功。任何帮助将不胜感激。我将以下内容放入我的 WebApiConfig

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

MediaTypeHeaderValue appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.FloatFormatHandling = Newtonsoft.Json.FloatFormatHandling.DefaultValue;
jsonFormatter.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;
jsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
jsonFormatter.SerializerSettings.FloatParseHandling =  FloatParseHandling.Double;
jsonFormatter.SerializerSettings.DefaultValueHandling =  DefaultValueHandling.Populate;

NaN 值不会被删除并被放入类中

public double Price { get; set; }

所以在一个数字里面我得到了 NaN 。


我最终找到了如何解决读写问题。

jsonFormatter.SerializerSettings.Converters.Add(new FloatConverter());

public class FloatConverter : JsonConverter
{
    public override bool CanRead
    {
        get
        {
            return true;
        }
    }

    public override bool CanWrite
    {
        get
        {
            return true;
        }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value == null)
        {
            writer.WriteNull();
            return;
        }

        var val = Convert.ToDouble(value);
        if (Double.IsNaN(val) || Double.IsInfinity(val))
        {
            writer.WriteNull();
            return;
        }
        if (value is float)
            writer.WriteValue((float)value);
        else
            writer.WriteValue((double)value);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
            return null;

        var value = JValue.Load(reader);
        var val = Convert.ToDouble(value);

        if (objectType == typeof(Double))
        {
            if (Double.IsNaN(val) || Double.IsInfinity(val))
                return (Double)0.00;
            else
                return (Double)value;
        }

        if (objectType == typeof(float?))
            return (float?)value;
        else
            return (float)value;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(double) || objectType == typeof(float);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除反序列化 Web API 2 C# 中的 NaN 值 的相关文章

随机推荐

  • WooCommerce - 发送有关自定义订单状态更改的自定义电子邮件

    我添加了自定义状态wc order confirmed Register new status function register order confirmed order status register post status wc o
  • OS X Lion 中的 easy_install pip 需要 sudo 吗?

    我从工作中的 Snow Leopard 转到家里的 Lion 安装 我不记得必须 sudo easy install pip 狮子需要这个吗 在我这样做之前我遇到了错误 pip 最终出现在这里 some computer which pip
  • 大规模分布式系统中的日志文件

    我在网格和 HPC 领域做了很多工作 对于分布在数百 或在某些情况下数千 服务器上的系统 我们面临的最大挑战之一是分析日志文件 当前日志文件本地写入每个刀片上的磁盘 但我们也可以考虑使用 UDP Appender 等发布日志信息并集中收集
  • PyDSTool 与 anaconda 未正确安装

    我正在尝试使用 anaconda2 安装 PyDSTool conda install PyDSTool 这似乎进展顺利 但是当我打开spyder并导入PyDSTool时 它给了我错误 import PyDSTool Traceback m
  • “scrollViewDidScroll”无法连续捕获移动

    我正在编写程序来在滚动 UITableView 时移动名为 myView 的 UIView 请看下面的图片 myView 会随着tableview的contentoffset的变化而改变它的 y坐标 我编写的主要代码是 func scrol
  • 使用 Knockout-Kendo.js 动态启用/禁用 kendo 日期选择器

    我正在尝试使用 Knockout Kendo js 根据选择的选定值启用 禁用 kendo 日期选择器 HTML
  • 将我的 HTML Google MAP API 版本 2 迁移到版本 3

    我将非常感谢对此的帮助 我的 html v2 文件和一些临时密钥工作正常 我从一些 XML 中获取位置 创建不同的颜色标记 并从信息窗口中的 XML 属性添加一些 URL 不是太复杂 现在我需要将其迁移到 v3 我找到了 v2 中函数的一些
  • 找不到 id= 的用户 (ActiveRecord::RecordNotFound)

    使用我的 Rails 应用程序 我可以成功创建一个对象 称为工作 将它们视为博客文章 作为 current user 一个用户 has many 可以工作 我可以通过使用 postgresql 浏览器检查数据库来验证该对象是否已成功创建 该
  • TMUX 会话不会导入 Python 模块

    大家好 这是我在 StackOverflow 上提出的第一个问题 希望大家都满意 我最近开始使用 TMUX 但在将其用于机器学习问题集时遇到问题 我正在使用 python 创建一个程序 并使用 sklearn 模块 基本上 当我在 TMUX
  • 库伯内特斯。 kubernetes 节点之间支持的最大距离/延迟是多少?

    我想创建一个 kubernetes 集群 我想要一个具有高可用性的主节点 工作节点和代理节点的集群 并且节点位于两个位置 是否记录了位置之间支持的最大距离或延迟 此外 我希望能提供官方文档的链接 但我找不到任何相关内容 谢谢 kuberne
  • 使用 GET_FILE_NAME Oracle Forms 无法打开对话框

    我有 Oracle 数据库 11g 带有 Oracle 表单和报告 11g 我创建了浏览按钮来从计算机或笔记本电脑目录中打开 CSV 文件 我在按下按钮时触发时使用此代码 declare filename varchar2 500 begi
  • R 中的 Uniroot 解决方案

    我想找到以下函数的根 x 0 5 f lt function y 1 pbeta 1 exp 0 002926543 107 2592 y 1 082618 exp 0 04097536 107 2592 y shape1 0 264022
  • 将多个文件拖放到用户窗体

    我正在尝试将多个文件拖放到用户窗体上以获取它们的路径 我用一个文件来管理它 感谢this https stackoverflow com questions 20569959 vba drag and drop file to user f
  • 如何在浏览器的调试器本身中调试动态加载的 JavaScript(使用 jQuery)?

    动态添加的脚本不会显示在浏览器调试器的脚本部分中 解释 我需要使用并且已经使用过 if someCondition true getScript myScirpt js function alert Load Complete myFunc
  • 在QWebView中设置useragent

    我有一个 QWebView 工作正常 然后 使用来自spynner 的代码 我尝试将useragent 方法绑定到自定义方法 这似乎在spynner 带有QWebPage 中有效 但在这里不起作用 非常感谢任何帮助 代码 def custo
  • Ant exec 结果属性不起作用

    我正在使用 Ant 调用批处理文件exec任务并将结果设置为resultpropery 但返回值永远不会到达Ant 下面是我的代码
  • TCPDF 可以原生将文本输出为图像吗

    TCPDF 在生成 PDF 时看起来确实很强大 由于很多事情都可以直接在 TCPDF 中完成 我想知道是否可以直接在 TCPDF 中将文本转换为图像 或者以这样的方式保存PDF 使得某些文本部分无法被机器轻松读取 目标是实现一种垃圾邮件防护
  • QDockWidget - 浮动时没有边框的窗口

    赢7 Qt 5 3 I use a QDockWidget与我的申请 按预期工作 现在我通过设置隐藏标题栏setTitleBarWidget new QWidget this 到默认构造的小部件 根据 Qt 文档 这是标准方法 也可以 标题
  • Android xamarin Visual Studio 错误:“System.Configuration.dll”

    我正在尝试建立一个新的 xamarin 项目 在其中我将与 aws dynamoDB 连接 但现在我收到这个错误 我搜索了所有内容 但找不到任何好的答案 我发现了一个 System Configuration dll 文件 但最高版本为 2
  • 删除反序列化 Web API 2 C# 中的 NaN 值

    您好 我想知道是否有人可以帮助我 我正在尝试在 Web API 2 中自动反序列化时自动将双值中的 NaN 替换为 0 我正在尝试使用 JSON NET 但没有成功 任何帮助将不胜感激 我将以下内容放入我的 WebApiConfig con