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; foreach (var property in node.Properties()) { definitionPropertyBag[property.Name] = property.Value.ToObject(); } return JsonConvert.DeserializeAnonymousType(node.ToString(), definition); } public override bool CanConvert(Type _) => true; }