Fix Json serialzier regression after hot-reload from 0f14672e3b

This commit is contained in:
Wojtek Figat
2023-11-29 12:28:30 +01:00
parent b7e4fe3e85
commit eb508fdc73

View File

@@ -19,7 +19,7 @@ namespace FlaxEngine.Json
{
internal class SerializerCache
{
public readonly JsonSerializerSettings JsonSettings;
public bool IsManagedOnly;
public Newtonsoft.Json.JsonSerializer JsonSerializer;
public StringBuilder StringBuilder;
public StringWriter StringWriter;
@@ -33,9 +33,9 @@ namespace FlaxEngine.Json
public uint CacheVersion;
#endif
public unsafe SerializerCache(JsonSerializerSettings settings)
public unsafe SerializerCache(bool isManagedOnly)
{
JsonSettings = settings;
IsManagedOnly = isManagedOnly;
StringBuilder = new StringBuilder(256);
StringWriter = new StringWriter(StringBuilder, CultureInfo.InvariantCulture);
MemoryStream = new UnmanagedMemoryStream((byte*)0, 0);
@@ -114,7 +114,7 @@ namespace FlaxEngine.Json
/// <summary>Builds the serializer</summary>
private void BuildSerializer()
{
JsonSerializer = Newtonsoft.Json.JsonSerializer.CreateDefault(Settings);
JsonSerializer = Newtonsoft.Json.JsonSerializer.CreateDefault(IsManagedOnly ? SettingsManagedOnly : Settings);
JsonSerializer.Formatting = Formatting.Indented;
JsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
}
@@ -149,8 +149,8 @@ namespace FlaxEngine.Json
internal static ExtendedSerializationBinder SerializationBinder;
internal static FlaxObjectConverter ObjectConverter;
internal static ThreadLocal<SerializerCache> Current = new ThreadLocal<SerializerCache>();
internal static ThreadLocal<SerializerCache> Cache = new ThreadLocal<SerializerCache>(() => new SerializerCache(Settings));
internal static ThreadLocal<SerializerCache> CacheManagedOnly = new ThreadLocal<SerializerCache>(() => new SerializerCache(SettingsManagedOnly));
internal static ThreadLocal<SerializerCache> Cache = new ThreadLocal<SerializerCache>(() => new SerializerCache(false));
internal static ThreadLocal<SerializerCache> CacheManagedOnly = new ThreadLocal<SerializerCache>(() => new SerializerCache(true));
internal static ThreadLocal<IntPtr> CachedGuidBuffer = new ThreadLocal<IntPtr>(() => Marshal.AllocHGlobal(32 * sizeof(char)), true);
internal static string CachedGuidDigits = "0123456789abcdef";
#if FLAX_EDITOR