33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Dynamic;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace LCU.Library.Internal.DocumentModels.Converter;
|
|
|
|
public class DynamicObjectJsonConverter : Newtonsoft.Json.JsonConverter
|
|
{
|
|
public override void WriteJson(JsonWriter writer, dynamic value, JsonSerializer serializer)
|
|
{
|
|
serializer.Serialize(writer, value);
|
|
}
|
|
|
|
public override dynamic ReadJson(JsonReader reader, Type objectType, dynamic existingValue, JsonSerializer serializer)
|
|
{
|
|
if (reader.TokenType != JsonToken.StartObject) return reader.Value;
|
|
|
|
var node = JObject.Load(reader);
|
|
|
|
var definition = new ExpandoObject();
|
|
var definitionPropertyBag = definition as IDictionary<string, object>;
|
|
foreach (var property in node.Properties())
|
|
{
|
|
definitionPropertyBag[property.Name] = property.Value.ToObject<object>();
|
|
}
|
|
|
|
return JsonConvert.DeserializeAnonymousType(node.ToString(), definition);
|
|
}
|
|
|
|
public override bool CanConvert(Type _) => true;
|
|
} |