2012-04-27 81 views
17

Ứng dụng của tôi nằm trong Asp.Net MVC3 được mã hóa bằng C#. Đây là yêu cầu của tôi. Tôi muốn một đối tượng trong định dạng sau. Đối tượng này sẽ đạt được khi tôi deserialize chuỗi Json.Deserialize chuỗi JSON để C# đối tượng

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

enter image description here

Sau khi sử dụng mã bên dưới:

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

Đối tượng những gì tôi nhận được tức là obje không hoạt động như obj1

enter image description here

Ở đây, trong này ví dụ chuỗi JSON của tôi là tĩnh, nhưng thực tế chuỗi JSON sẽ là thời gian chạy được tạo động, vì vậy tôi sẽ không thể nhận được Arg1 và Arg2 mọi lúc.

+0

Câu hỏi này đã tồn tại: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

@jbtule cảm ơn, i đã thử mã được cung cấp tại liên kết ở trên. Sau khi một số chỉnh sửa, nó đã cho tôi một đối tượng tương tự nhưng tôi vẫn không thể sử dụng nó như tôi có thể sử dụng obj1 trong mã của tôi –

Trả lời

16

Tôi nghĩ JavaScriptSerializer không tạo đối tượng động.

Vì vậy, bạn nên xác định các lớp đầu tiên:

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

Và deserialize rằng thay vì object:

serializer.Deserialize<MyObj>(str); 

Không testet, hãy thử.

7

Tôi tin rằng bạn đang tìm kiếm này:

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

Cùng một vấn đề xảy ra với tôi. Vì vậy, nếu dịch vụ trả về phản hồi dưới dạng chuỗi JSON, bạn phải deserialize chuỗi đầu tiên, sau đó bạn sẽ có thể deserialize loại đối tượng từ nó đúng:

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 Chắc chắn nó sẽ hoạt động ....;)

3

Điều này có thể hữu ích:

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

đâu "json" là chuỗi chứa các giá trị JSON. Sau đó, để lấy các giá trị từ các JSONObject bạn có thể sử dụng

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

Thay đổi MyPropertyType với loại thích hợp (ToInt32, ToString, ToBoolean, vv).

0

Sử dụng mã này:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString); 
Các vấn đề liên quan