web-dev-qa-db-ja.com

JSON文字列をc#オブジェクトにデシリアライズします

私のアプリケーションは、C#でコーディングされたAsp.Net MVC3にあります。これが私の要件です。次の形式のオブジェクトが必要です。このオブジェクトは、Json文字列を逆シリアル化するときに実現されます。

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を常に取得することはできません。

20
Shahbaz Chishty

JavaScriptSerializerは動的オブジェクトを作成しないと思います。

したがって、最初にクラスを定義する必要があります。

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

そして、objectの代わりにそれをデシリアライズします:

serializer.Deserialize<MyObj>(str);

テストしていない、試してみてください。

19
Marc

あなたはこれを探していると思います:

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

このコードを使用してください:

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

これは役に立つかもしれません:

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

「json」は、JSON値を含む文字列です。次に、使用できるjsonObjectから値を取得します

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

MyPropertyTypeを適切なタイプ(ToInt32、ToString、ToBooleanなど)に変更します。

3
A. Acosta

同じ問題が私に起こりました。したがって、サービスが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確実に動作します。..;)

1
Veni Souto

解決策:

 public Response Get(string jsonData) {
     var json = JsonConvert.DeserializeObject<modelname>(jsonData);
     var data = StoredProcedure.procedureName(json.Parameter, json.Parameter, json.Parameter, json.Parameter);
     return data;
 }

モデル:

 public class modelname {
     public long parameter{ get; set; }
     public int parameter{ get; set; }
     public int parameter{ get; set; }
     public string parameter{ get; set; }
 }
1
sachin