Мы наблюдаем очень странное поведение.
Кватернионы десериализуются правильно (мы можем создать собственный 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);
Код: Выделить всё
{
"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
Мобильная версия