35 lines
1.1 KiB
C#
35 lines
1.1 KiB
C#
|
#nullable enable
|
|||
|
using System;
|
|||
|
using System.Text.Json;
|
|||
|
using System.Text.Json.Serialization;
|
|||
|
|
|||
|
namespace Ryujinx.Common.Utilities
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Specifies that value of <see cref="TEnum"/> will be serialized as string in JSONs
|
|||
|
/// </summary>
|
|||
|
/// <remarks>
|
|||
|
/// Trimming friendly alternative to <see cref="JsonStringEnumConverter"/>.
|
|||
|
/// Get rid of this converter if dotnet supports similar functionality out of the box.
|
|||
|
/// </remarks>
|
|||
|
/// <typeparam name="TEnum">Type of enum to serialize</typeparam>
|
|||
|
public sealed class TypedStringEnumConverter<TEnum> : JsonConverter<TEnum> where TEnum : struct, Enum
|
|||
|
{
|
|||
|
public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|||
|
{
|
|||
|
var enumValue = reader.GetString();
|
|||
|
if (string.IsNullOrEmpty(enumValue))
|
|||
|
{
|
|||
|
return default;
|
|||
|
}
|
|||
|
|
|||
|
return Enum.Parse<TEnum>(enumValue);
|
|||
|
}
|
|||
|
|
|||
|
public override void Write(Utf8JsonWriter writer, TEnum value, JsonSerializerOptions options)
|
|||
|
{
|
|||
|
writer.WriteStringValue(value.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|