web-dev-qa-db-fra.com

Désérialiser la chaîne JSON en objet c #

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 };

enter image description here

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

enter image description here

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.

20
Shahbaz Chishty

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.

19
Marc

Je pense que vous cherchez ceci:

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

Utilisez ce code:

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

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.).

3
A. Acosta

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 ....;)

1
Veni Souto

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; }
 }
1
sachin