implement EftEnumListConverter

This commit is contained in:
CWX
2025-02-07 16:20:54 +00:00
parent 0f0bc7c7a3
commit c221f3919f
2 changed files with 47 additions and 1 deletions
@@ -0,0 +1,45 @@
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Core.Utils.Json.Converters;
public class EftListEnumConverter<T> : JsonConverter<List<T>>
{
private static readonly JsonSerializerOptions _options = new() { Converters = { new JsonStringEnumConverter() } };
public override List<T>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.StartArray)
{
using (var jsonDocument = JsonDocument.ParseValue(ref reader))
{
var jsonText = jsonDocument.RootElement.GetRawText();
jsonText = jsonText.Replace("[", "").Replace("]", "");
var list = new List<T>();
if (!string.IsNullOrEmpty(jsonText))
{
foreach (var str in jsonText.Split(","))
{
var newStr = str.Replace("\r", "").Replace("\n", "").Trim();
list.Add(JsonSerializer.Deserialize<T>(newStr, options));
}
}
return list;
}
}
throw new JsonException();
}
public override void Write(Utf8JsonWriter writer, List<T> value, JsonSerializerOptions options)
{
writer.WriteStartArray();
foreach (var x1 in value)
{
JsonSerializer.Serialize(writer, x1, _options);
}
writer.WriteEndArray();
}
}
+2 -1
View File
@@ -39,7 +39,6 @@ public class JsonUtil
new EftEnumConverter<MemberCategory>(),
new EftEnumConverter<PinLockState>(),
new EftEnumConverter<PlayerSideMask>(),
new EftEnumConverter<EquipmentSlots>(),
new EftEnumConverter<DamageEffectType>(),
new EftEnumConverter<RepairStrategyType>(),
new EftEnumConverter<ThrowWeapType>(),
@@ -50,6 +49,8 @@ public class JsonUtil
new EftEnumConverter<ArmorMaterial>(),
new EftEnumConverter<RequirementState>(),
new EftEnumConverter<ExfiltrationType>(),
new EftEnumConverter<EquipmentSlots>(),
new EftListEnumConverter<EquipmentSlots>(),
new BaseInteractionRequestDataConverter()
}
};