public static string Serialize(IExtendedDatas instance, Type typeBase) { if (instance == null) { throw new NullReferenceException(nameof(instance)); } var propertiesToExcludes = TypeDiscovery.Instance.GetProperties(typeBase); var result = JObject.FromObject(instance); foreach (var item in propertiesToExcludes) { if (result.ContainsKey(item.Name)) { result.Remove(item.Name); } } var u = Serialize(instance.ExtendedDatas()); result.Merge(u); return(result.ToString(Newtonsoft.Json.Formatting.None)); }
public static void Deserialize(IExtendedDatas instance, string text) { if (instance == null) { throw new NullReferenceException(nameof(instance)); } Type type = instance.GetType(); var list = TypeDiscovery.Instance.GetProperties(type); JObject o = JObject.Parse(text); foreach (var item in o) { if (!list.ContainsKey(item.Key)) { if (item.Value is JValue v) { instance.ExtendedDatas().Add(item.Key, v.Value.ToString()); } else if (item.Value is JObject ob) { DynObject d = new DynObject(); instance.ExtendedDatas().Add(item.Key, d); Deserialize(ob, d); } else if (item.Value is JArray a) { DynObject d = new DynObject(); instance.ExtendedDatas().Add(item.Key, d); Deserialize(a, d); } } } }
public void DeserializeExtendedDatas(string payload, IExtendedDatas instance) { TypeDiscovery.Instance.PopulateObject(payload, instance); DynObjectSerializer.Deserialize(instance, payload); }