26

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

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

ここに画像の説明を入力してください

以下のコードを使用した後:

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

私が取得したオブジェクト、つまりobjeはobj1として機能しません

ここに画像の説明を入力してください

ここで、この例では、私のJSON文字列は静的ですが、実際にはJSON文字列は動的に生成されるランタイムになるため、Arg1とArg2を常に取得することはできません。

4

6 に答える 6

20

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

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

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

そして、代わりにそれを逆シリアル化しますobject

serializer.Deserialize<MyObj>(str);

testetではなく、試してみてください。

于 2012-04-27T13:10:54.330 に答える
12

このコードを使用します:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
于 2017-09-27T10:45:34.247 に答える
7

私はあなたがこれを探していると信じています:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());
于 2012-04-27T13:13:44.413 に答える
3

これは便利かもしれません:

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

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

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

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

于 2016-01-05T19:12:24.360 に答える
2

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

于 2014-05-04T14:23:27.990 に答える
2

解決 :

 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; }
 }
于 2019-07-30T12:40:23.787 に答える