<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

ExpandoObjectConverter

Converts an ExpandoObject to and from JSON.
using Newtonsoft.Json.Utilities; using System; using System.Collections.Generic; using System.Dynamic; using System.Globalization; using System.Runtime.CompilerServices; namespace Newtonsoft.Json.Converters { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class ExpandoObjectConverter : JsonConverter { public override bool CanWrite => false; public override void WriteJson(JsonWriter writer, [System.Runtime.CompilerServices.Nullable(2)] object value, JsonSerializer serializer) { } [return: System.Runtime.CompilerServices.Nullable(2)] public override object ReadJson(JsonReader reader, Type objectType, [System.Runtime.CompilerServices.Nullable(2)] object existingValue, JsonSerializer serializer) { return ReadValue(reader); } [return: System.Runtime.CompilerServices.Nullable(2)] private object ReadValue(JsonReader reader) { if (reader.MoveToContent()) { switch (reader.TokenType) { case JsonToken.StartObject: return ReadObject(reader); case JsonToken.StartArray: return ReadList(reader); default: if (JsonTokenUtils.IsPrimitiveToken(reader.TokenType)) return reader.Value; throw JsonSerializationException.Create(reader, "Unexpected token when converting ExpandoObject: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } } throw JsonSerializationException.Create(reader, "Unexpected end when reading ExpandoObject."); } private object ReadList(JsonReader reader) { IList<object> list = new List<object>(); while (reader.Read()) { switch (reader.TokenType) { default: { object item = ReadValue(reader); list.Add(item); break; } case JsonToken.EndArray: return list; case JsonToken.Comment: break; } } throw JsonSerializationException.Create(reader, "Unexpected end when reading ExpandoObject."); } private object ReadObject(JsonReader reader) { IDictionary<string, object> dictionary = new ExpandoObject(); while (reader.Read()) { switch (reader.TokenType) { case JsonToken.PropertyName: { string key = reader.Value.ToString(); if (!reader.Read()) throw JsonSerializationException.Create(reader, "Unexpected end when reading ExpandoObject."); object obj2 = dictionary[key] = ReadValue(reader); break; } case JsonToken.EndObject: return dictionary; } } throw JsonSerializationException.Create(reader, "Unexpected end when reading ExpandoObject."); } public override bool CanConvert(Type objectType) { return objectType == typeof(ExpandoObject); } } }