Mon application est en Asp.Net MVC3 codé en C #. C'est mon exigence. Je veux un objet au format suivant. Cet objet devrait être atteint lorsque je désérialise la chaîne Json.
var obj1 = new { arg1=1,arg2=2 };
Après avoir utilisé le code ci-dessous:
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize<object>(str);
L'objet que je reçois c'est-à-dire obje n'agit pas comme obj1
Ici, dans cet exemple, ma chaîne JSON est statique, mais en fait, la chaîne JSON va être générée dynamiquement à l'exécution, donc je ne pourrai pas obtenir Arg1 et Arg2 tout le temps.
Je pense que JavaScriptSerializer ne crée pas d'objet dynamique.
Vous devez donc définir la classe en premier:
class MyObj {
public int arg1 {get;set;}
public int arg2 {get;set;}
}
Et désérialisez cela au lieu de object
:
serializer.Deserialize<MyObj>(str);
Pas testet, veuillez essayer.
Je pense que vous cherchez ceci:
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());
Utilisez ce code:
var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
Cela peut être utile:
var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);
Où "json" est la chaîne qui contient les valeurs JSON. Ensuite, pour récupérer les valeurs du jsonObject, vous pouvez utiliser
myProperty = Convert.MyPropertyType(jsonObject["myProperty"]);
Changer MyPropertyType pour le type approprié (ToInt32, ToString, ToBoolean, etc.).
Le même problème m'est arrivé. Donc, si le service renvoie la réponse sous la forme d'une chaîne JSON, vous devez d'abord désérialiser la chaîne, vous pourrez alors désérialiser correctement le type d'objet:
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 Bien sûr, cela fonctionnera ....;)
solution :
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;
}
modèle:
public class modelname {
public long parameter{ get; set; }
public int parameter{ get; set; }
public int parameter{ get; set; }
public string parameter{ get; set; }
}