file class EvalResultConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanWrite => true;
public override bool CanConvert(Type objectType) => true;
public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
=> throw new NotImplementedException();
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
var token = JToken.FromObject(value!);
if (token.Type is JTokenType.Object)
{
var tokenObject = (JObject)token;
foreach (var property in tokenObject.Properties())
{
if (property.Value.Type is JTokenType.Object && typeof(IOptional).IsAssignableFrom(value!.GetType().GetProperty(property.Name)!.PropertyType))
{
var propertyObject = (JObject)property.Value;
tokenObject[property.Name] = propertyObject["HasValue"]!.Value<bool>() ? propertyObject["Value"] : null;
}
}
tokenObject.WriteTo(writer);
}
else token.WriteTo(writer);
}
}
file class EvalResultConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanWrite => true;
public override bool CanConvert(Type objectType) => true;
public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
=> throw new NotImplementedException();
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
var token = JToken.FromObject(value!);
if (token.Type is JTokenType.Object)
{
var tokenObject = (JObject)token;
foreach (var property in tokenObject.Properties())
{
if (property.Value.Type is JTokenType.Object && typeof(IOptional).IsAssignableFrom(value!.GetType().GetProperty(property.Name)!.PropertyType))
{
var propertyObject = (JObject)property.Value;
tokenObject[property.Name] = propertyObject["HasValue"]!.Value<bool>() ? propertyObject["Value"] : null;
}
}
tokenObject.WriteTo(writer);
}
else token.WriteTo(writer);
}
}