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);
}
}