Files
monorepo/LCU.API.Internal.Document/LCU.Library.Internal.DocumentModels/Converter/DynamicObjectJsonConverter.cs
T
2026-03-13 09:11:35 -05:00

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;
}