gpt4 book ai didi

c# - 在反序列化 Web API 2 C# 中删除 NaN 值

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:14 25 4
gpt4 key购买 nike

你好我想知道是否有人可以帮助我,我正在尝试在 Web API 2 中自动反序列化时自动将 double 值中的 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);
}
}

关于c# - 在反序列化 Web API 2 C# 中删除 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42682371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com