JSON.NET – Pass Different Class Object into JArray to Serialize & Deserialize
public class JSONItem<T> where T : class { public string type { get; set; } public T obj { get; set; } public JSONItem(T obj) { this.type = typeof(T).Name; this.obj = obj; } } |
A a1 = new A(); … … A a2 = new A(); … … B b1 = new B(); … … C c1 = new C(); … … C c2 = new C(); … … JArray ary = new JArray(); ary.Add(JObject.FromObject(new JSONItem<A>(a1))); ary.Add(JObject.FromObject(new JSONItem<B>(b1))); ary.Add(JObject.FromObject(new JSONItem<C>(c2))); ary.Add(JObject.FromObject(new JSONItem<A>(a2))); ary.Add(JObject.FromObject(new JSONItem<C>(c1))); List<A> alist = new List<A>(); List<B> blist = new List<B>(); List<C> clist = new List<C>(); foreach (var item in ary) { if (item["type"].ToString() == "A") alist.Add(item["obj"].ToObject<A>()); else if (item["type"].ToString() == "B") blist.Add(item["obj"].ToObject<B>()); else if (item["type"].ToString() == "C") clist.Add(item["obj"].ToObject<C>()); } |
Parse .Net Object to JObject JObject.FromObject( … … ); Parse JObject to .Net Object A item = (obj as JToken).ToObject<A>(); |