public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject obj = JObject.Load(reader); var type = obj["Type"].Value <string>(); if (string.IsNullOrEmpty(type)) { throw new ArgumentException($"Cannot deserialized objects which don't have a 'Type'-property."); } BasePodcastModification mod = null; if (type == typeof(EpisodeDescriptionFilterModification).FullName) { mod = obj.ToObject <EpisodeDescriptionFilterModification>(); } else if (type == typeof(EpisodeTitleFilterModification).FullName) { mod = obj.ToObject <EpisodeTitleFilterModification>(); } else if (type == typeof(EpisodeDurationFilterModification).FullName) { mod = obj.ToObject <EpisodeDurationFilterModification>(); } else if (type == typeof(EpisodePublishDateFilterModification).FullName) { mod = obj.ToObject <EpisodePublishDateFilterModification>(); } else if (type == typeof(RemoveDuplicateEpisodesModification).FullName) { mod = obj.ToObject <RemoveDuplicateEpisodesModification>(); } else { throw new ArgumentException($"Cannot deserialize objects with the Type '{type}'."); } return(mod); }
public static List <BaseDbParameter> FromModification(BasePodcastModification modification, ModificationDto dto) { List <BaseDbParameter> parameters = new List <BaseDbParameter>(); if (modification is EpisodeDescriptionFilterModification description) { parameters.Add(new StringParameter(description.Argument, parameters.Count)); parameters.Add(new StringFilterMethodParameter(description.Method, parameters.Count)); parameters.Add(new BoolParameter(description.CaseInvariant, parameters.Count)); } else if (modification is EpisodeDurationFilterModification duration) { parameters.Add(new DurationFilterMethodParameter(duration.Method, parameters.Count)); parameters.Add(new LongParameter(duration.Duration, parameters.Count)); } else if (modification is EpisodePublishDateFilterModification publish) { parameters.Add(new DateTimeParameter(publish.Date, parameters.Count)); parameters.Add(new DateTimeFilterMethodParameter(publish.Method, parameters.Count)); } else if (modification is EpisodeTitleFilterModification title) { parameters.Add(new StringParameter(title.Argument, parameters.Count)); parameters.Add(new StringFilterMethodParameter(title.Method, parameters.Count)); parameters.Add(new BoolParameter(title.CaseInvariant, parameters.Count)); } else if (modification is RemoveDuplicateEpisodesModification remove) { parameters.Add(new BoolParameter(remove.KeepFirstEpisode, parameters.Count)); parameters.Add(new RemoveDuplicateEpisodesMethodParameter(remove.TimeFrame, parameters.Count)); } else { throw new ArgumentException($"The type {modification.GetType()} is not yet implemented."); } return(parameters); }
/// <summary> /// Constructor for regular use /// </summary> public ModificationDto(BasePodcastModification modification) { this.TypeName = modification.GetType().FullName; Parameters = BaseDbParameter.FromModification(modification, this); }