implement EftEnumListConverter
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user