@@ -12,6 +12,7 @@ namespace FlaxEngine
|
||||
#if FLAX_EDITOR
|
||||
[CustomEditor(typeof(FlaxEditor.CustomEditors.Editors.AssetRefEditor))]
|
||||
#endif
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Json.JsonAssetReferenceConverter))]
|
||||
public struct JsonAssetReference<T> : IComparable, IComparable<JsonAssetReference<T>>, IEquatable<JsonAssetReference<T>>
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -429,6 +429,60 @@ namespace FlaxEngine.Json
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class JsonAssetReferenceConverter : JsonConverter
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override unsafe void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
|
||||
{
|
||||
var asset = (JsonAsset)value.GetType().GetField("Asset").GetValue(value);
|
||||
var id = asset?.ID ?? Guid.Empty;
|
||||
writer.WriteValue(JsonSerializer.GetStringID(&id));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
|
||||
{
|
||||
var result = Activator.CreateInstance(objectType);
|
||||
if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
JsonSerializer.ParseID((string)reader.Value, out var id);
|
||||
var asset = Content.LoadAsync<JsonAsset>(id);
|
||||
objectType.GetField("Asset").SetValue(result, asset);
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.StartObject)
|
||||
{
|
||||
// [Deprecated on 26.07.2024, expires on 26.07.2026]
|
||||
while (reader.Read() && reader.TokenType != JsonToken.EndObject)
|
||||
{
|
||||
switch (reader.TokenType)
|
||||
{
|
||||
case JsonToken.PropertyName:
|
||||
{
|
||||
var propertyName = (string)reader.Value;
|
||||
reader.Read();
|
||||
if (propertyName == "Asset" && reader.TokenType == JsonToken.String)
|
||||
{
|
||||
JsonSerializer.ParseID((string)reader.Value, out var id);
|
||||
var asset = Content.LoadAsync<JsonAsset>(id);
|
||||
objectType.GetField("Asset").SetValue(result, asset);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType.Name.StartsWith("JsonAssetReference");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/// <summary>
|
||||
/// Serialize Guid values using `N` format
|
||||
|
||||
Reference in New Issue
Block a user