Пример #1
0
        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);
        }
Пример #2
0
 public bool TryGetDiff(Guid id, out ModifyEntry diff)
 {
     return(this.ModifyById.TryGetValue(id, out diff));
 }
Пример #3
0
 /// <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);
 }