Impossible de désérialiser l’object JSON en cours (par exemple, {“name”: “value”})

Ce sont mes données JSON

{ "logInResult": [ { "Name": "yogesh singh", "cityName": "", "img": "DefaultImage/D_Vp_Men.png", "usrId": "374" } ] } 

et c’est mon code

 public async Task Index() { HttpClient webClient1 = new HttpClient(); Uri uri = new Uri("http://m.vinipost.com/service/userprofile.svc/[email protected]&pass=12345"); HttpResponseMessage response1; response1 = await webClient1.GetAsync(uri); var jsonSsortingng = await response1.Content.ReadAsSsortingngAsync(); var _Data = JsonConvert.DeserializeObject<List>(jsonSsortingng); foreach (JClass Student in _Data) { ViewBag.Message += Student.Name + ", "; } dynamic obj = JsonConvert.DeserializeObject(jsonSsortingng); ViewBag.Message += obj.data.Name; return View(); } 

et l’erreur est

Impossible de désérialiser l’object JSON actuel (par exemple, {“name”: “value”}) en type ‘System.Collections.Generic.List`1 [MvcSumit1.Models.JClass]’ car ce type nécessite un tableau JSON (par exemple, [1, 2,3]) pour désérialiser correctement. Pour corriger cette erreur, remplacez le JSON par un tableau JSON (par exemple, [1,2,3]) ou modifiez le type désérialisé de sorte qu’il s’agisse d’un type .NET normal (par exemple, pas un type primitif comme entier, ni un type de collection comme un tableau ou une liste) pouvant être désérialisé à partir d’un object JSON. JsonObjectAtsortingbute peut également être ajouté au type pour le forcer à se désérialiser à partir d’un object JSON. Chemin ‘logInResult’, ligne 1, position 15.

Vous ne pouvez pas désérialiser directement à partir de votre réponse API à l’aide de JsonConvert.DeserializeObject.

Essayez ce code ci-dessous:

 JObject jsonResponse = JObject.Parse(jsonSsortingng); JObject objResponse = (JObject)jsonResponse["logInResult"]; Dictionary _Data = Newtonsoft.Json.JsonConvert.DeserializeObject>(objResponse.ToSsortingng()); 

J’espère que ceci vous aidera.

Vous devez créer les classes suivantes afin de mapper vos données json aux classes réelles.

  public class LogInResult { public ssortingng Name { get; set; } public ssortingng cityName { get; set; } public ssortingng img { get; set; } public ssortingng usrId { get; set; } } public class RootObject { public List logInResult { get; set; } } 

Vous pouvez ensuite stocker le RootObject pour un traitement ultérieur:

 var result = JsonConvert.DeserializeObject(jsonSsortingng); 

En utilisant le getter de la liste, vous pouvez obtenir la liste et la parcourir comme d’habitude.

Votre question semble être une copie de: Utilisation de JsonConvert.DeserializeObject pour désérialiser Json en classe C # POCO


Vous essayez de désérialiser votre object JSON dans un tableau JSON.

Stockez uniquement le contenu de logInResult dans jsonSsortingng , à savoir:

[{"Name":"yogesh singh","cityName":"","img":"DefaultImage\/D_Vp_Men.png","usrId":"374"}]

Bien entendu, cela suppose que vous JClass correctement votre JClass .

Votre code C # pense lire ceci:

 [ { "Name": "yogesh singh", "cityName": "", "img": "DefaultImage/D_Vp_Men.png", "usrId": "374" } ] 

C’est-à-dire un tableau d’objects, alors qu’il lit un object avec une propriété logInResult, qui est un tableau.

J’ai été confronté au même problème. Je voulais simplement signaler quand il existe un tableau ou une liste dans JSON, comme dans logInResults, une liste d’un type. Par conséquent, lors de la désérialisation de la conversion JSON, il est impossible de comprendre ce que vous pouvez faire. Créez votre modèle de cette manière.

 Class giveName { givenName[] logInResult {get;set;} // can use list also will work fine } public class giveName2 { public ssortingng Name {get;set;} public ssortingng cityName {get;set;} public ssortingng img {get;set;} public ssortingng usrId {get;set;} } 

Je vais vous dire pourquoi, car pour que cela fonctionne, vous devez avoir créé un type (classe) qui possède une propriété nommée logInResult, de la même manière que l’object dont la liste est composée doit être créé. recevoir un type puis les propriétés correspondant aux éléments de la liste

Note: GiveName et GiveName2 est le nom que vous pouvez vous donner, cela n’a aucune importance avec le nom de la classe