@@ -12,6 +12,7 @@ namespace FlaxEngine
|
|||||||
#if FLAX_EDITOR
|
#if FLAX_EDITOR
|
||||||
[CustomEditor(typeof(FlaxEditor.CustomEditors.Editors.AssetRefEditor))]
|
[CustomEditor(typeof(FlaxEditor.CustomEditors.Editors.AssetRefEditor))]
|
||||||
#endif
|
#endif
|
||||||
|
[Newtonsoft.Json.JsonConverter(typeof(Json.JsonAssetReferenceConverter))]
|
||||||
public struct JsonAssetReference<T> : IComparable, IComparable<JsonAssetReference<T>>, IEquatable<JsonAssetReference<T>>
|
public struct JsonAssetReference<T> : IComparable, IComparable<JsonAssetReference<T>>, IEquatable<JsonAssetReference<T>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <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>
|
/// <summary>
|
||||||
/// Serialize Guid values using `N` format
|
/// Serialize Guid values using `N` format
|
||||||
|
|||||||
Reference in New Issue
Block a user