Advertisement
Guest User

MatchDetailPlayerConverter

a guest
Aug 26th, 2015
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using MyNamespace.Domain;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7.  
  8. namespace MyNamespace.Converters
  9. {
  10.     public class MatchDetailPlayerConverter : JsonConverter
  11.     {
  12.         private readonly string[] _itemKeys = {"item_0", "item_1", "item_2", "item_3", "item_4", "item_5"};
  13.  
  14.         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  15.         {
  16.             var hasItems = (MatchDetailPlayer) value;
  17.             var obj = JObject.FromObject(value);
  18.             AddItems(obj, hasItems.Items);
  19.             obj.WriteTo(writer);
  20.         }
  21.  
  22.         private void AddItems(JObject obj, IReadOnlyList<Item> items)
  23.         {
  24.             for (var i = 0; i < _itemKeys.Length; i++)
  25.             {
  26.                 obj.Add(_itemKeys[i], ((int)items[i]).ToString());
  27.             }
  28.         }
  29.  
  30.         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  31.         {
  32.             var jo = JObject.Load(reader);
  33.             var hasItems = jo.ToObject<MatchDetailPlayer>();
  34.             hasItems.Items = GetItems(jo);
  35.             return hasItems;
  36.         }
  37.  
  38.         private List<Item> GetItems(JObject jo)
  39.         {
  40.             return _itemKeys.Select(itemKey => jo[itemKey]).Select(itemVal => itemVal.Value<Item>()).ToList();
  41.         }
  42.  
  43.         public override bool CanConvert(Type objectType)
  44.         {
  45.             return (objectType == typeof (MatchDetailPlayer));
  46.         }
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement