public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); ChangeItemBase result; if (jObject["action"] == null) { // We cannot determine the correct type, let's hope we were provided one result = (ChangeItemBase)Activator.CreateInstance(objectType); } else { // Determine the type based on the media_type ChangeAction mediaType = jObject["action"].ToObject <ChangeAction>(); switch (mediaType) { case ChangeAction.Added: result = new ChangeItemAdded(); break; case ChangeAction.Created: result = new ChangeItemCreated(); break; case ChangeAction.Updated: result = new ChangeItemUpdated(); break; case ChangeAction.Deleted: result = new ChangeItemDeleted(); break; case ChangeAction.Destroyed: result = new ChangeItemDestroyed(); break; default: throw new ArgumentOutOfRangeException(); } } // Populate the result serializer.Populate(jObject.CreateReader(), result); return(result); }
public async Task ChangeItemConverter_ChangeItemAdded() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ChangeItemConverter()); ChangeItemAdded original = new ChangeItemAdded(); original.Iso_639_1 = "en"; original.Value = "Hello world"; string json = JsonConvert.SerializeObject(original, settings); ChangeItemAdded result = JsonConvert.DeserializeObject <ChangeItemBase>(json, settings) as ChangeItemAdded; await Verify(result); }
public async Task ChangeItemConverter_ChangeItemAdded() { ChangeItemAdded original = new ChangeItemAdded(); original.Iso_639_1 = "en"; original.Value = "Hello world"; string json = Serializer.SerializeToString(original); ChangeItemAdded result = Serializer.DeserializeFromString <ChangeItemBase>(json) as ChangeItemAdded; await Verify(new { json, result }); }
public void ChangeItemConverter_ChangeItemAdded() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ChangeItemConverter()); ChangeItemAdded original = new ChangeItemAdded(); original.Iso_639_1 = "en"; original.Value = "Hello world"; string json = JsonConvert.SerializeObject(original, settings); ChangeItemAdded result = JsonConvert.DeserializeObject <ChangeItemBase>(json, settings) as ChangeItemAdded; Assert.NotNull(result); Assert.Equal(original.Iso_639_1, result.Iso_639_1); Assert.Equal(original.Value, result.Value); }