using System; using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.Xna.Framework.Content; namespace MonoGame.Extended.Serialization.Json; /// /// Loads content from a JSON file into the using the asset name /// /// The type of content to load public class ContentManagerJsonConverter : JsonConverter { private readonly ContentManager _contentManager; private readonly Func _getAssetName; /// /// Initializes a new instance of the class. /// /// The used to load content. /// A function that returns the asset name for a given instance of . public ContentManagerJsonConverter(ContentManager contentManager, Func getAssetName) { _contentManager = contentManager; _getAssetName = getAssetName; } /// public override bool CanConvert(Type typeToConvert) => typeToConvert == typeof(T); /// public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var assetName = reader.GetString(); return _contentManager.Load(assetName); } /// /// /// Throw if is . /// public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) { ArgumentNullException.ThrowIfNull(writer); var asset = value; var assetName = _getAssetName(asset); writer.WriteStringValue(assetName); } }