public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject j = JObject.Load(reader); if (j.TryGetValue("type", out var typetoken)) { if (Types.TryGetValue(typetoken.Value <string>(), out var typeInfo)) { var js = new JsonSerializer(); js.Converters.Add(new StringEnumConverter()); var pjs = new JsonSerializer(); foreach (var c in serializer.Converters) { pjs.Converters.Add(c); } Type inType = typeInfo.InnerType; object v; if (j.TryGetValue("value", out var valuetoken)) { v = js.Deserialize(valuetoken.CreateReader(), inType); } else { v = Activator.CreateInstance(inType); } IModifyValue[] p; if (j.TryGetValue("parameter", out var parametertoken)) { p = (IModifyValue[])pjs.Deserialize(parametertoken.CreateReader(), typeof(IModifyValue[])); } else { p = new IModifyValue[0]; } ModifyEntry[] entries; if (j.TryGetValue("modify", out var modifytoken)) { entries = (ModifyEntry[])pjs.Deserialize(modifytoken.CreateReader(), typeof(ModifyEntry[])); } else { entries = new ModifyEntry[0]; } IModifyValue imv = (IModifyValue)Activator.CreateInstance(typeInfo.ModifyType); imv.Parameter = p; imv.Value = v; imv.Modify = entries; return(imv); } } return(null); }
public bool TryGetDiff(Guid id, out ModifyEntry diff) { return(this.ModifyById.TryGetValue(id, out diff)); }
/// <summary> /// Try get the diff associated with the Id given in parameter /// </summary> /// <param name="id">The Id of entity to retieve</param> /// <param name="diff">The diff if it's been retrieved, otherwise default(ModifyEntry)</param> /// <returns>True if a diff was retrieved, otherwise false</returns> public bool TryGetDiff(Guid id, out ModifyEntry diff) { return this.ModifyById.TryGetValue(id, out diff); }