Files
plexcsharp/LukeHagar/PlexAPI/SDK/Utils/AnyDeserializer.cs

94 lines
2.8 KiB
C#

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
//
// Changes to this file may cause incorrect behavior and will be lost when
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
#nullable enable
namespace LukeHagar.PlexAPI.SDK.Utils
{
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
public class AnyDeserializer : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(Dictionary<string, object>));
}
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
throw new NotSupportedException();
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object? existingValue,
JsonSerializer serializer
)
{
if (reader.TokenType == JsonToken.StartObject) {
return ParseTokenIntoDictionary(JToken.Load(reader));
}
throw new JsonSerializationException($"Could not deserialize token into dictionary");
}
private Dictionary<string, object?> ParseTokenIntoDictionary(JToken token)
{
var dict = new Dictionary<string, object?>();
foreach (var child in token.Children<JProperty>())
{
object? val = null;
if (child.Value is JObject)
{
val = ParseTokenIntoDictionary(child.Value);
}
else if (child.Value is JArray)
{
val = ParseTokenIntoList(child.Value);
}
else if (child.Value != null)
{
val = ((JValue)child.Value).Value;
}
dict[child.Name] = val;
}
return dict;
}
private List<object?> ParseTokenIntoList(JToken token)
{
var list = new List<object?>();
foreach (var child in token.Children())
{
if (child is JObject)
{
list.Add((object)ParseTokenIntoDictionary(child));
}
else if (child is JArray)
{
list.Add((object)ParseTokenIntoList(child));
}
else
{
list.Add(((JValue)child).Value);
}
}
return list;
}
}
}