C# ASP. NET WebApi (2 / Core 3.1) Проблема с Json сериализацией больших чисел - PullRequest
0 голосов
/ 19 февраля 2020

У меня проблема с большими числами (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.

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 19 февраля 2020

Как оказалось, сериализованные необработанные данные верны. Это только визуализация SwaggerUi / Firefox до JavaScript, которая вызывает проблему.

...