using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TOOHUCardAPI.DTO.RankData; namespace TOOHUCardAPI.Data.JsonConverters { public class RankEntryDTOConverter : JsonConverter { public override void WriteJson(JsonWriter writer, RankEntryDTO value, JsonSerializer serializer) { Dictionary cards = value.Cards; value.Cards = null; JObject jo = JObject.FromObject(value); foreach (var kv in cards) { jo[kv.Key] = kv.Value; } jo.WriteTo(writer); } public override RankEntryDTO ReadJson(JsonReader reader, Type objectType, RankEntryDTO existingValue, bool hasExistingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); RankEntryDTO dto = jo.ToObject(); dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card")) .Select(i => KeyValuePair.Create(i.Name, i.Value)) .ToDictionary(kv => kv.Key, kv => kv.Value.ToObject()); return dto; } } }