Je suis aux prises avec un sujet qui a beaucoup de variantes dans ce forum mais je n'arrive pas à trouver celui qui me convient, et je pense que c'est à cause de la façon dont mon JSON array est :(Je ne suis pas un expert mais je réussis déjà à "presque" obtenir la fin .. Je dois entrer la valeur "Status" et "listOfCredDetails"Comment désérialiser un tableau JSON en C#
Mon JSON (s'appelle responseFromServer):
{
"Status": {
"StatusCode":143,
"SubStatus":0,
"Description":"Ok"
},
"ListofCredDetails":
[{
"Client":"a",
"CredID":111,
"CredUserID":"abc"
},
{
"Client":"b",
"CredID":112,
"CredUserID":"def"
},
{
"Client":"c",
"CredID":113,
"CredUserID":"ghi"
}]
}
Ensuite, à partir de nombreux exemples dans ce forum, en prenant des morceaux que j'ai créé mes classes:
[Serializable]
public class StatusReturn
{
public int StatusCode { get; set; }
public int SubStatus { get; set; }
public string Description { get; set; }
}
[Serializable]
public class CredDetailsReturn
{
public string Client{ get; set; }
public int CredID{ get; set; }
public string CredUserID{ get; set; }
}
[Serializable]
public class GetUserCredentialDetailsReturn
{
public StatusReturn status;
public List<CredDetailsReturn> listOfCredDetails;
public GetUserCredentialDetailsReturn()
{
status = new StatusReturn();
listOfCredDetails = new List<CredDetailsReturn>();
}
}
Alors je vais désérialiser pour obtenir
1. « Etat » et ses éléments en un seul objet et
2. « ListofCredDetails » et sa liste d'éléments en un seul objet
puis créer un objet pour "GetUserCredentialDetailsReturn" pour retourner à la fois le statut (objet) et ListofCredDetails (objet) à la fois. Quelqu'un peut-il m'aider à comprendre comment puis-je y parvenir? J'ai essayé quelques-uns comme ci-dessous pour désérialiser et d'obtenir des données JSON en deux objets distincts.
Mais il ne fonctionne pas ....
public GetUserCredentialDetailsReturn InvokeRequest(RESTInvokeClass objInvoke)
{
...
...
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string responseText = streamReader.ReadToEnd();
GetUserCredentialDetailsReturn result = new GetUserCredentialDetailsReturn();
result.status = JsonConvert.DeserializeObject<StatusReturn>(responseText);
result.listOfCredDetails = JsonConvert.DeserializeObject<List<CredDetailsReturn>>(responseText);
return result;
}
}
Vous devriez faire ceci: 'GetUserCredentialDetailsReturn result = JsonConvert.DeserializeObject (responseText)'. Et supprimez les lignes 'result.status = ...'et' result.listOfCredDetails = ... ' –
Rob
@ rob ... Je n'ai pas besoin du JSON complet pour désérialiser en un seul objet .. J'ai besoin de la partie" Statut "des données dans JSON dans un objet et" ListofCredDetails "(liste) une partie des données dans JSON dans un autre objet .. – Shravan
Habituellement, il est beaucoup plus simple de désérialiser le texte JSON complet et d'accéder aux éléments dont vous avez besoin. Sinon, si vous ne voulez vraiment que des éléments isolés, vous devez utiliser les parties de niveau inférieur de la bibliothèque JSON: Analyser le flot de jetons, suivre l'arborescence des objets et ne renvoyer que les éléments dont vous avez besoin. – DrKoch