2012-04-27 4 views
17

내 응용 프로그램은 Asp.Net MVC3에 C#으로 코딩되어 있습니다. 내 요구 사항입니다. 다음과 같은 형식의 개체가 필요합니다.이 개체는 Json 문자열을 deserialize 할 때 얻어야합니다. 아래의 코드를 사용 후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하지 않습니다 행위 여기 enter image description here

으로 obj1로 무엇을 얻을 목적, 이걸로 예를 들어 내 JSON 문자열은 정적이지만 실제로 JSON 문자열은 동적으로 생성 된 런타임이 될 것이므로 언제나 Arg1과 Arg2를 얻을 수 없습니다.

+0

이 질문은 이미 존재합니다, http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

감사 @jbtule 전 위의 링크에서 주어진 코드를 시도했습니다. 약간의 편집 후, 비슷한 객체를 주었지만 여전히 코드에서 obj1을 사용할 수 있으므로 사용할 수 없습니다. –

답변

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

이 유용 할 수 있습니다 :

"JSON"는 JSON 값을 포함하는 문자열입니다
var serializer = new JavaScriptSerializer(); 
dynamic jsonObject = serializer.Deserialize<dynamic>(json); 

. 그런 다음 적절한 유형 (ToInt32, ToString, ToBoolean 등)에

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

변경 MyPropertyType를 사용할 수있다 된 JSONObject에서 값을 검색 할 수 있습니다.

0

사용이 코드 :

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);