У меня проблема с большими числами (Int64 / UInt64), округленными до сериализации ASP. NET Json. Это происходит в ASP. NET WebApi2 (. NET 4.5.2), а также в ASP. NET Core WebApi (Core 3.1).
Это мой DTO-класс:
public class TestDTO
{
public IEnumerable<long> BigNumbers { get; set; }
}
Это мой метод управления:
[HttpGet]
public IHttpActionResult GetNumberTest()
{
TestDTO dto = new TestDTO
{
BigNumbers = new long[]
{
121720000000004554,
21720000000004554,
1720000000004554,
720000000004554,
}
};
return Ok(dto);
}
И вот результат:
{
"bigNumbers": [
121720000000004560,
21720000000004550,
1720000000004554,
720000000004554
]
}
Как видите, первые два числа округлены ( первый округляется вверх, второй - вниз), два последних не округляются. Это, конечно, может быть фатальным поведением. Как я могу отключить это поведение?
Странная вещь ... когда я сериализую DTO вручную через Newtonsoft. Json (JsonConvert.SerializeObject), тогда результат будет правильным.
Я знаю, что это работает, когда я сериализирую числа в виде строк, но, на мой взгляд, это не реальное решение проблемы. Я должен иметь возможность полагаться на правильную сериализацию моего DTO.
Может кто-нибудь помочь мне, пожалуйста?