System.Text.Json не обрабатывает кватернионы. Есть ли какие-то настройки Json, которые нам нужно установить/поддержать?C#

Место общения программистов C#
Ответить
Anonymous
 System.Text.Json не обрабатывает кватернионы. Есть ли какие-то настройки Json, которые нам нужно установить/поддержать?

Сообщение Anonymous »

У нас возникли проблемы с десериализацией классов со свойствами Quaternion.
Мы наблюдаем очень странное поведение.
Кватернионы десериализуются правильно (мы можем создать собственный JsonConverter, чтобы подтвердить правильность возвращаемого значения).
Но фактические значения, которые затем появляются в свойствах внутри класса,... неправильны.
Краткий пример

Код: Выделить всё

public class MyQuatTest
{
public Quaternion Quat1 { get; set; }
public Quaternion Quat2 { get; set; }
public Vector2 Vec2 { get; set; }
public Vector3 Vec3 { get; set; }
}
Затем делаем это

Код: Выделить всё

var jsonOptions = new JsonSerializerOptions()
{
IncludeFields = true
};
var test = new MyQuatTest()
{
Quat1 = new Quaternion(0.5f, 0.5f, 0.5f, 0.5f),
Quat2 = new Quaternion(new Vector3(0.2f, 0.2f, 0.2f), 0.7f),
Vec2 = new Vector2(0.1f, 10.5f),
Vec3 = new Vector3(0.21f, 0.22f, 0.23f)
};
var jsonTest = JsonSerializer.Serialize(test, jsonOptions);
var resultTest = JsonSerializer.Deserialize(jsonTest, jsonOptions);
Получаем следующий JSON...

Код: Выделить всё

{
"Quat1" : {
"IsIdentity" : false,
"X" : 0.5,
"Y" : 0.5,
"Z" : 0.5,
"W" : 0.5
},
"Quat2" : {
"IsIdentity" : false,
"X" : 0.2,
"Y" : 0.2,
"Z" : 0.2,
"W" : 0.7
},
"Vec2" : {
"X" : 0.1,
"Y" : 10.5
},
"Vec3" : {
"X" : 0.21,
"Y" : 0.22,
"Z" : 0.23
}
}
Но при десериализации мы получаем...

Код: Выделить всё

Quat1 = {X:0.5 Y:0.5 Z:3.90591E-36 W:0}
Quat2 = {X:0.2 Y:0.7 Z:3.90591E-36 W:0}
🤯
Как уже упоминалось, мы попробовали собственный конвертер для собственной сериализации типа Quaternion и можем подтвердить, что он десериализует на 100 % правильно, но тогда они все равно выходят поврежденными (например, W == 0)
Это при работе в Blazor WASM и .net-ios, по крайней мере.
.net8.0 также

Подробнее здесь: https://stackoverflow.com/questions/797 ... ings-we-ne
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»