Мы используем фреймворк FNA (C#), без Unity.
Мы пытаемся перейти от NewtonSoft в System.Text.Json, поскольку игра будет работать в собственной среде AOT.
System.Text.Json «случайным образом» не удается сериализовать/десериализовать все свойства объекта, некоторые из которых правильно, некоторые - нет, когда мы активируем генератор исходного кода.
Когда генератор исходного кода отключен, он сериализуется/десериализуется правильно (но не работает в AOT).Это наш вариант сериализации в Newton (всегда работает даже медленно в Native AOT)
Код: Выделить всё
public static JsonSerializerSettings settings = new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.None,
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto,
DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate,
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace,
Error = (sender, args) =>
{
args.ErrorContext.Handled = true;
Console.WriteLine("JsonDeserialize Error: ***" + args.ErrorContext.Error.Message);
}
};
Код: Выделить всё
public static JsonSerializerOptions jbinSerializerOption = new JsonSerializerOptions
{
WriteIndented = false, // Keep this as false to reduce JSON size.
PropertyNameCaseInsensitive = false,
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault, // Ignore default values to reduce JSON size.
IncludeFields = true,
ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles,
TypeInfoResolver = Core_JsonContext.Default, //When we mask this, source code is disabled
};
Код: Выделить всё
[JsonSourceGenerationOptions( //wouafo ::: Source Generator parameter here
WriteIndented = false,
PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase,
GenerationMode = JsonSourceGenerationMode.Default,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
IncludeFields = true
)]
[JsonSerializable(typeof(Data_Zone))]
[JsonSerializable(typeof(Data_PageCredit))]
[JsonSerializable(typeof(AstralDBSystemLoader))]
[JsonSerializable(typeof(AstralDataBaseLoader))]
[JsonSerializable(typeof(Microsoft.Xna.Framework.Color))]
[JsonSerializable(typeof(Microsoft.Xna.Framework.Rectangle))]
[JsonSerializable(typeof(Microsoft.Xna.Framework.Vector2))]
[JsonSerializable(typeof(Microsoft.Xna.Framework.Vector3))]
[JsonSerializable(typeof(Microsoft.Xna.Framework.Vector4))]
[JsonSerializable(typeof(CoreBD.Core_Bitmap))]
[JsonSerializable(typeof(CoreBD.Core_Sprite))]
[JsonSerializable(typeof(CoreBD.Core_Sequence))]
[JsonSerializable(typeof(CoreBD.Core_Clip))]
[JsonSerializable(typeof(CoreBD.Core_ClipEtatMouv))]
[JsonSerializable(typeof(CoreBD.Core_ClipImgCle))]
[JsonSerializable(typeof(CoreBD.Core_ClipRoute))]
[JsonSerializable(typeof(CoreBD.Core_ClipImgCleAction))]
[JsonSerializable(typeof(CoreBD.Core_IANeurone))]
[JsonSerializable(typeof(CoreBD.Data_Zone))]
[JsonSerializable(typeof(CoreBD.Core_ParamZone))]
public partial class Core_JsonContext : JsonSerializerContext //wouafo ::: Source Generator est ici
{
}
когда мы пытаемся использовать простое клонирование, например
Код: Выделить всё
string copieText = System.Text.Json.JsonSerializer.Serialize(source, jbinSerializerOptionTriche);
return System.Text.Json.JsonSerializer.Deserialize(copieText, jbinSerializerOption);
Странно то, что если мы сериализуем нашу базу данных в файл без источника код, мы можем получить его обратно с исходным кодом. Но нам нужно клонировать во время выполнения, здесь это не работает.
Подробнее здесь: https://stackoverflow.com/questions/781 ... ce-code-ge