据我所知,这是在使用NewtonsoftJson时处理双重“无限”值的适当方法,以避免在序列化时使用这些值。
x.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;在使用System.Text.Json时,相应的方法是什么?
发布于 2022-03-07 04:31:14
如果没有自定义转换器,您就不能指示System.Text.Json编写一个0,但是--对于记录-- NaN和无穷大可以用JsonNumberHandling.AllowNamedFloatingPointLiterals来处理。
"NaN“、"Infinity”和"-Infinity“字符串标记可以作为浮点常量读取,这些常量的单值和双值将作为它们相应的JSON表示形式写入。
using System.Text.Json;
var options = new JsonSerializerOptions {
NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals
};
Console.WriteLine(JsonSerializer.Serialize(Double.NaN, options));
Console.WriteLine(JsonSerializer.Serialize(Double.NegativeInfinity, options));
Console.WriteLine(JsonSerializer.Serialize(Double.PositiveInfinity, options));
Console.WriteLine(JsonSerializer.Deserialize<double>("\"NaN\"", options));
Console.WriteLine(JsonSerializer.Deserialize<double>("\"-Infinity\"", options));
Console.WriteLine(JsonSerializer.Deserialize<double>("\"Infinity\"", options));版画
"NaN"
"-Infinity"
"Infinity"
NaN
-∞
∞发布于 2022-03-03 21:30:48
最后我用了一个自定义转换器。
在startup.cs中
.AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new DoubleInfinityConverter())
);换流器
internal class DoubleInfinityConverter : JsonConverter<double>
{
public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.GetDouble();
public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options)
{
if (double.IsNaN(value) || double.IsInfinity(value))
{
writer.WriteStringValue(default(double).ToString());
return;
}
writer.WriteStringValue(value.ToString());
}
}https://stackoverflow.com/questions/71343365
复制相似问题