From 4fa0ee29fe71f57c06faded56525f19a35360afb Mon Sep 17 00:00:00 2001 From: Stephen Erstad Date: Tue, 4 Mar 2014 22:12:08 -0600 Subject: [PATCH] Raw JSON on PocketItem Model Implementation of setting the raw JSON representation of a PocketItem to the PocketSharp model --- PocketSharp/Models/PocketItem.cs | 10 +++++++++ PocketSharp/PocketClient.cs | 1 + PocketSharp/Utilities/JsonExtensions.cs | 28 ++++++++++++++++++++++--- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/PocketSharp/Models/PocketItem.cs b/PocketSharp/Models/PocketItem.cs index 9c909b9..76236a3 100644 --- a/PocketSharp/Models/PocketItem.cs +++ b/PocketSharp/Models/PocketItem.cs @@ -13,6 +13,7 @@ namespace PocketSharp.Models [JsonObject] [ImplementPropertyChanged] [DebuggerDisplay("Uri = {Uri}, Title = {Title}")] + public class PocketItem { /// @@ -352,5 +353,14 @@ namespace PocketSharp.Models { get { return Images != null && Images.Count > 0 ? Images[0] : null; } } + + /// + /// Gets and sets the JSON the model was deserialized from + /// + /// + /// Model's original JSON representation + /// + [JsonIgnore] + public string Json { get; set; } } } diff --git a/PocketSharp/PocketClient.cs b/PocketSharp/PocketClient.cs index 78f9b98..79f7563 100644 --- a/PocketSharp/PocketClient.cs +++ b/PocketSharp/PocketClient.cs @@ -227,6 +227,7 @@ namespace PocketSharp }, Converters = { + new PocketItemConverter(), new BoolConverter(), new UnixDateTimeConverter(), new NullableIntConverter(), diff --git a/PocketSharp/Utilities/JsonExtensions.cs b/PocketSharp/Utilities/JsonExtensions.cs index 936ab9b..6ceefac 100644 --- a/PocketSharp/Utilities/JsonExtensions.cs +++ b/PocketSharp/Utilities/JsonExtensions.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using PocketSharp.Models; namespace PocketSharp { @@ -129,7 +130,6 @@ namespace PocketSharp JObject jObject; List result = new List(); T target; - // object is an array if (reader.TokenType == JsonToken.StartArray) { @@ -152,8 +152,7 @@ namespace PocketSharp // Populate the object properties foreach (KeyValuePair item in jObject) { - target = new T(); - serializer.Populate(item.Value.CreateReader(), target); + target = serializer.Deserialize(item.Value.CreateReader()); result.Add(target); } @@ -169,5 +168,28 @@ namespace PocketSharp { return new List(); } + + } + + + + public class PocketItemConverter : CustomCreationConverter + { + + public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) + { + + var jObject = JObject.ReadFrom(reader); + var pocketItem = new PocketItem(); + serializer.Populate(jObject.CreateReader(), pocketItem); + pocketItem.Json = jObject.ToString(); + + return pocketItem; + } + + public override PocketItem Create(Type objectType) + { + return new PocketItem(); + } } }