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_ChangeItemDeleted() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ChangeItemConverter()); ChangeItemDeleted original = new ChangeItemDeleted(); original.Iso_639_1 = "en"; original.OriginalValue = "Hello world"; string json = JsonConvert.SerializeObject(original, settings); ChangeItemDeleted result = JsonConvert.DeserializeObject <ChangeItemBase>(json, settings) as ChangeItemDeleted; await Verify(result); }
public async Task ChangeItemConverter_ChangeItemDeleted() { ChangeItemDeleted original = new ChangeItemDeleted(); original.Iso_639_1 = "en"; original.OriginalValue = "Hello world"; string json = Serializer.SerializeToString(original); ChangeItemDeleted result = Serializer.DeserializeFromString <ChangeItemBase>(json) as ChangeItemDeleted; await Verify(new { json, result }); }
public void ChangeItemConverter_ChangeItemDeleted() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ChangeItemConverter()); ChangeItemDeleted original = new ChangeItemDeleted(); original.Iso_639_1 = "en"; original.OriginalValue = "Hello world"; string json = JsonConvert.SerializeObject(original, settings); ChangeItemDeleted result = JsonConvert.DeserializeObject <ChangeItemBase>(json, settings) as ChangeItemDeleted; Assert.NotNull(result); Assert.Equal(original.Iso_639_1, result.Iso_639_1); Assert.Equal(original.OriginalValue, result.OriginalValue); }