Я в процессе обновления до ASP. NET Core 3.1, после переключения на System.Text. Json заметил странное изменение результата в значениях с плавающей запятой. После исследования я понял, что System.Text. Json преобразует двойное значение в int. Например, рассмотрим простой контракт:
public class RowVector
{
[JsonPropertyName("x")]
public double X { get; set; }
[JsonPropertyName("y")]
public double Y { get; set; }
[JsonPropertyName("z")]
public double Z { get; set; }
}
var rowVector = new RowVector { X = 1.0, Y = 213.9, Z = 112.0 };
var serializedData = JsonSerializer.Serialize(rowVector);
Serialized-Data output with System.Text.Json :{"x":1,"y":213.9,"z":112}
Здесь x и z являются значениями int, тогда как в Newtonsoft. Json,
Serialized-Data output with Newtonsoft.Json :{"X":1.0,"Y":213.9,"Z":112.0}
Здесь x и z сохраняются как двойные .
Таким образом, для system.text. json при десериализации эти значения являются целыми числами, и это приводит к изменению в наших вычислениях обработки, любая идея, почему это реализовано таким образом в System.Text. Json