stringToObjectConverter
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using Core.Utils.Json.Converters;
|
||||
|
||||
namespace Core.Models.Eft.Common.Tables;
|
||||
|
||||
@@ -76,8 +77,8 @@ public class Props
|
||||
[JsonPropertyName("ItemSound")]
|
||||
public string? ItemSound { get; set; }
|
||||
|
||||
[JsonPropertyName("Prefab")]
|
||||
public Prefab? Prefab { get; set; }
|
||||
[JsonPropertyName("Prefab")] // TODO: TYPE FUCKERY: can be a Prefab object or empty string or a string
|
||||
public object? Prefab { get; set; }
|
||||
|
||||
[JsonPropertyName("UsePrefab")]
|
||||
public Prefab? UsePrefab { get; set; }
|
||||
@@ -1344,6 +1345,12 @@ public class Props
|
||||
|
||||
[JsonPropertyName("Body")]
|
||||
public string? Body { get; set; }
|
||||
|
||||
[JsonPropertyName("Hands")]
|
||||
public string? Hands { get; set; }
|
||||
|
||||
[JsonExtensionData]
|
||||
public Dictionary<string, object> OtherProperties { get; set; }
|
||||
}
|
||||
|
||||
public class WeaponRecoilSettings
|
||||
@@ -1704,4 +1711,4 @@ public enum ItemType
|
||||
{
|
||||
NODE = 1,
|
||||
ITEM = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Utils.Json.Converters;
|
||||
|
||||
public class StringToObjectFactoryConverter : JsonConverterFactory
|
||||
{
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return (JsonConverter)Activator.CreateInstance(typeof(StringToObjectConverter<>).MakeGenericType(typeToConvert));
|
||||
}
|
||||
|
||||
public class StringToObjectConverter<T> : JsonConverter<T>
|
||||
{
|
||||
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
switch (reader.TokenType)
|
||||
{
|
||||
case JsonTokenType.String:
|
||||
// start array
|
||||
reader.Read();
|
||||
return default;
|
||||
case JsonTokenType.StartObject:
|
||||
using (var jsonDocument = JsonDocument.ParseValue(ref reader))
|
||||
{
|
||||
var jsonText = jsonDocument.RootElement.GetRawText();
|
||||
return JsonSerializer.Deserialize<T>(jsonText);
|
||||
}
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value == null)
|
||||
value = default;
|
||||
JsonSerializer.Serialize(writer, value, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user