Cannot get the value of a token type ‘Number‘ as a string.

开发环境:.net core, 引入了WebApiClientCore,并添加了AddHttpApi。

情形:在调用python处理程序获取返回结果后,反序列化成C#类,其中double类型的数据有NaN,导致反序列化失败。

原因:System.Text.Json不支持NaN的反序列化。

解决办法:自定义Converter并注册。

public class DoubleConverter : JsonConverter
{
	public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
	{
		if (reader.TokenType == JsonTokenType.String && reader.GetString() == "NaN")
		{
			return double.NaN;
		}

		return reader.GetDouble(); // JsonException thrown if reader.TokenType != JsonTokenType.Number
	}

	public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options)
	{
		if (double.IsNaN(value))
		{
			writer.WriteStringValue("NaN");
		}
		else
		{
			writer.WriteNumberValue(value);
		}
	}
}
services.AddHttpApi(options =>
{
     options.JsonDeserializeOptions.Converters.Add(new DoubleConverter());
});

*********************************************2022/10/28更新*********************************************

System.Text.Json官方给出了更为简洁的处理方式:

请参考System.Text.Json: (De)serialization support for quoted numbers

你可能感兴趣的:(异常集合,1024程序员节)