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) { List cards = value.Cards; value.Cards = null; JObject jo = JObject.FromObject(value); for (int i = 0; i < cards.Count; i++) { jo[$"card{i}"] = JObject.FromObject(cards[i]); } jo.WriteTo(writer); } public override RankEntryDTO ReadJson(JsonReader reader, Type objectType, RankEntryDTO existingValue, bool hasExistingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); RankEntryDTO dto = new RankEntryDTO(); serializer.Populate(reader, dto); dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card")) .Select(i => i.Value.ToObject()).ToList(); return dto; } } }