JSON.NET – Pass Different Class Object into JArray to Serialize & Deserialize

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>();