2015-05-21 23 views
0

我創建了一個名爲RESTObjectBase的類。此課程由任何其他類別繼承,包括個人,地址,電話號碼等信息。反序列化複雜JSON包含繼承對象類型的數組

我創建了一個List<RestObjectBase>,其中包含一個或多個此類型的對象,並通過REST調用將其傳回到前端。

即返回JSON如下:

{ 
    "Items":[ 
     { 
     "__type":"AnyObjectInheritedFromBaseClass", 
     "ObjectType":3, 
     "First_Name":"", 
     "Last_Name":"", 
     } 
    ], 
    "Status":0 
} 

我想在另一端反序列化這一點。我有多個錯誤,包括「類型不能爲空」,但這不是我的問題。

有什麼方法可以將這種複雜性的對象反序列化到原始類/列表。爲什麼我很掙扎?它是最終繼承RESTObjectBase的一組對象,它看起來並不像反序列化足夠聰明。

反序列化的前端可能是任何設備或平臺,所以我不能簡單地使用像JSON.NET這樣的東西,因爲它在任何地方都不受支持。

我甚至會很樂意解構JSON並序列化數組中的每個項目,但我無法弄清楚如何做到這一點。我可以使用該類型來解決如何反序列化它。

任何幫助,將不勝感激。

+0

你在使用什麼串行器? 「__type」參數的存在表明它是「DataContractJsonSerializer」或「JavaScriptSerializer」。 – dbc

+0

查看VS中的「粘貼JSON作爲類」功能。 http://blogs.msdn.com/b/webdev/archive/2012/12/18/paste-json-as-classes-in-asp-net-and-web-tools-2012-2-rc.aspx – Jeremy

+0

謝謝。這兩件事讓我回到了正確的道路上。那和2個小時的睡眠:)。 –

回答

0

這是關於使用正確的序列化器。我正在使用DataContractJsonSerializer序列化,所以反序列化也是如此,並且按預期工作。

 RESTResponse rr2 = null; 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      var writer = new StreamWriter(ms); 
      writer.Write(textBox1.Text); 
      writer.Flush(); 
      ms.Position = 0; 

      DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(RESTResponse)); 

      rr2 = (RESTResponse)s.ReadObject(ms); 
     } 

雖然我計劃我在移動設備上的許多不同的平臺做這個,我打算使用Xamarin所以我應該能夠做同樣的代碼。

這也意味着我可以使用JSON.NET。

相關問題