私のアプリケーションは、C#でコーディングされたAsp.Net MVC3にあります。これが私の要件です。次の形式のオブジェクトが必要です。このオブジェクトは、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を常に取得することはできません。
JavaScriptSerializerは動的オブジェクトを作成しないと思います。
したがって、最初にクラスを定義する必要があります。
class MyObj {
public int arg1 {get;set;}
public int arg2 {get;set;}
}
そして、object
の代わりにそれをデシリアライズします:
serializer.Deserialize<MyObj>(str);
テストしていない、試してみてください。
あなたはこれを探していると思います:
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());
このコードを使用してください:
var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
これは役に立つかもしれません:
var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);
「json」は、JSON値を含む文字列です。次に、使用できるjsonObjectから値を取得します
myProperty = Convert.MyPropertyType(jsonObject["myProperty"]);
MyPropertyTypeを適切なタイプ(ToInt32、ToString、ToBooleanなど)に変更します。
同じ問題が私に起こりました。したがって、サービスが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確実に動作します。..;)
解決策:
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; }
}