2012-04-27 13 views
17

My ApplicationはAsp.Netにあります。MVC3はC#でコード化されています。 これは私の要件です。次の形式のオブジェクトが必要です。このオブジェクトは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); 

私はすなわちオブジェないの行為ここ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); 
関連する問題