Raw JSON on PocketItem Model

Implementation of setting the raw JSON representation of a PocketItem to
the PocketSharp model
This commit is contained in:
Stephen Erstad
2014-03-04 22:12:08 -06:00
parent c21abd5f21
commit 4fa0ee29fe
3 changed files with 36 additions and 3 deletions
+10
View File
@@ -13,6 +13,7 @@ namespace PocketSharp.Models
[JsonObject]
[ImplementPropertyChanged]
[DebuggerDisplay("Uri = {Uri}, Title = {Title}")]
public class PocketItem
{
/// <summary>
@@ -352,5 +353,14 @@ namespace PocketSharp.Models
{
get { return Images != null && Images.Count > 0 ? Images[0] : null; }
}
/// <summary>
/// Gets and sets the JSON the model was deserialized from
/// </summary>
/// <value>
/// Model's original JSON representation
/// </value>
[JsonIgnore]
public string Json { get; set; }
}
}
+1
View File
@@ -227,6 +227,7 @@ namespace PocketSharp
},
Converters =
{
new PocketItemConverter(),
new BoolConverter(),
new UnixDateTimeConverter(),
new NullableIntConverter(),
+25 -3
View File
@@ -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<T> result = new List<T>();
T target;
// object is an array
if (reader.TokenType == JsonToken.StartArray)
{
@@ -152,8 +152,7 @@ namespace PocketSharp
// Populate the object properties
foreach (KeyValuePair<string, JToken> item in jObject)
{
target = new T();
serializer.Populate(item.Value.CreateReader(), target);
target = serializer.Deserialize<T>(item.Value.CreateReader());
result.Add(target);
}
@@ -169,5 +168,28 @@ namespace PocketSharp
{
return new List<T>();
}
}
public class PocketItemConverter : CustomCreationConverter<PocketItem>
{
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();
}
}
}