mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-22 03:59:35 +08:00
34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
using Milimoe.FunGame.Core.Interface.Base;
|
|
|
|
namespace Milimoe.FunGame.Core.Library.Common.Architecture
|
|
{
|
|
public abstract class BaseEntityConverter<T> : JsonConverter<T>, IEntityConverter<T>
|
|
{
|
|
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|
{
|
|
T? result = default;
|
|
|
|
while (reader.Read())
|
|
{
|
|
if (reader.TokenType == JsonTokenType.EndObject) break;
|
|
|
|
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
{
|
|
result ??= NewInstance();
|
|
string propertyName = reader.GetString() ?? "";
|
|
reader.Read();
|
|
ReadPropertyName(ref reader, propertyName, options, ref result);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public abstract T NewInstance();
|
|
|
|
public abstract void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref T result);
|
|
}
|
|
}
|