【发布时间】:2020-11-10 19:25:20
【问题描述】:
我正在使用 Utf8 json 库使用 DeserializeAsync 类的 DeserializeAsync 方法反序列化我的 JSON。有时我看到它抛出异常 -
Arithmetic operation resulted in an overflow.
所以看起来我的 JSON 数据的值太大而无法放入我们对象的某个属性中,从而导致此溢出异常。下面是我试图打印错误的 json 并导致此 Arithmetic Overflow 错误的代码,但无论何时发生此异常,它都不会记录该 JSON。
using (var content = httpResponseMessage.Content)
{
if (content == null) return (default(T), statusCode);
using (var responseStream = await httpResponseMessage.Content.ReadAsStreamAsync())
{
try
{
deserializedValue = await JsonSerializer.DeserializeAsync<T>(responseStream, formatResolver);
}
catch (Exception ex)
{
var bodyString = (ex as JsonParsingException)?.GetUnderlyingByteArrayUnsafe();
var error = (bodyString != null) ? $"Bad json: {Encoding.UTF8.GetString(bodyString)}" : "Cannot Deserialize JSON";
logger.logError(error, ex.Message, "Deserialization Exception", ex.StackTrace, (int)statusCode);
return (default(T), HttpStatusCode.BadRequest);
}
}
}
出于某种原因,每当发生此异常时,bodyString 都会为 null,这就是为什么我的条件没有得到评估以获取 JSON 正文的原因。我的理解是它会抛出 JsonParsingException 但看起来它会抛出一些其他异常。
有什么方法可以在发生此异常时获取 JSON 正文?或者当这个异常有效地发生时,用一种更好的方式来获取 JSON?
【问题讨论】:
标签: c# json deserialization utf8json