2012-04-27 154 views
17

我的應用程序是在C#中編寫的Asp.Net MVC3。 這就是我的要求。我想要一個以下格式的對象。當我反序列化Json字符串時,應該實現此對象。反序列化JSON字符串到C#對象

var obj1 = new { arg1=1,arg2=2 }; 

enter image description here

使用下面的代碼後:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}"; 
JavaScriptSerializer serializer1 = new JavaScriptSerializer(); 
object obje = serializer1.Deserialize<object>(str); 

的對象是我所得到即OBJE不作爲OBJ1

enter image description here

這裏,在這例如我的JSON字符串是靜態的,但實際上JSON字符串將是動態生成的運行時,所以我無法一直獲得Arg1和Arg2。

+0

這個問題已經存在:http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule 2012-04-27 13:28:19

+0

@jbtule謝謝,我嘗試了上述鏈接給出的代碼。經過一些編輯,它給了我一個類似的對象,但我仍然無法使用它,因爲我可以在我的代碼中使用obj1 – 2012-04-27 14:03:30

回答

16

我認爲JavaScriptSerializer不會創建動態對象。

所以,你應該首先定義類:

class MyObj { 
    public int arg1 {get;set;} 
    public int arg2 {get;set;} 
} 

和反序列化,而不是object

serializer.Deserialize<MyObj>(str); 

不testet,請嘗試。

7

我相信你正在尋找這樣的:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}"; 
JavaScriptSerializer serializer1 = new JavaScriptSerializer(); 
object obje = serializer1.Deserialize(str, obj1.GetType()); 
1

同樣的問題發生在我身上。因此,如果服務返回的響應,你必須先反序列化字符串JSON字符串,那麼你就能夠正確地從它反序列化對象類型:

string json= string.Empty; 
using (var streamReader = new StreamReader(response.GetResponseStream(), true)) 
     { 
      json= new JavaScriptSerializer().Deserialize<string>(streamReader.ReadToEnd()); 

     } 
//To deserialize to your object type... 
MyType myType; 
using (var memoryStream = new MemoryStream()) 
     { 
      byte[] jsonBytes = Encoding.UTF8.GetBytes(@json); 
      memoryStream.Write(jsonBytes, 0, jsonBytes.Length); 
      memoryStream.Seek(0, SeekOrigin.Begin); 
      using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(memoryStream, Encoding.UTF8,   XmlDictionaryReaderQuotas.Max, null)) 
      { 
       var serializer = new DataContractJsonSerializer(typeof(MyType)); 
       myType = (MyType)serializer.ReadObject(jsonReader); 

      } 
     } 

4肯定它會工作....; )

3

這可能是有用的:

var serializer = new JavaScriptSerializer(); 
dynamic jsonObject = serializer.Deserialize<dynamic>(json); 

其中 「JSON」 是包含JSON值的字符串。然後從JSONObject的檢索值你可以使用

myProperty = Convert.MyPropertyType(jsonObject["myProperty"]); 

更改MyPropertyType爲適當的類型(ToInt32,的ToString,ToBoolean等)。

0

使用此代碼:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString); 
相關問題