Приложение ASP.NET Core использует Newtonsoft JSON.NET для сериализации:
builder.Services.AddControllers().AddNewtonsoftJson();
Есть некоторая модель со свойством типа double:
public class SomeModel
{
public double Number { get; set; } = 0.0000000100000000000000001234567;
}
А еще этот контроллер:
[ApiController]
public class HomeController : ControllerBase
{
[HttpGet]
[Route("/")]
public SomeModel Index()
{
return new SomeModel();
}
}
Результат: json {"number":1E-08}.
Ожидаемый результат {"number": 0.0000000100000000000000001234567}. Как этого можно достичь?
Я уже пробовал использовать FloatParseHandling = FloatParseHandling.Decimal и создать новый конвертер, но научные обозначения остались.





вам нужно указать формат с самого начала этот пример должен помочь вам понять, как преобразовать его и округление:
void Main()
{
var x = new SomeModel().Number;
Console.WriteLine(x);
Console.WriteLine(decimal.Parse(x.ToString(), NumberStyles.Float));
var x2 = new SomeModel().Number2;
Console.WriteLine(x2);
Console.WriteLine(decimal.Parse(x2.ToString(), NumberStyles.Float));
Console.WriteLine(decimal.Parse(new SomeModel().Number3.ToString(), NumberStyles.Float));
}
public class SomeModel
{
public double Number { get; set; } = 0.0000000100000000000000001234567;
public double Number2 { get; set; } = 0.0000000100000000000000001234567F;
public decimal Number3 { get; set; } = 0.0000000100000000000000001234567M;
}
результат будет
1E-08
0.00000001
9.99999993922529E-09
0.00000000999999993922529
0.0000000100000000000000001235
сериализованный {"Номер":1E-08, "Номер2":9.99999993922529E-09,"Номер3":0.0000000100000000000000001235}
На самом деле это не связано с Newtonsoft JSON.NET, C# отобразит 0.0000000100000000000000001234567 до 0e-08 , вы можете напрямую увидеть его внутри VS при использовании точки останова. Не могли бы вы сказать мне, почему вы будете использовать его внутри своей модели?