Deserialise imbriquée JSON avec Newtonsoft et C#
Je suis en train d'analyser une réponse Json forme d'une API Rest. Je peux obtenir la réponse fines et ont créé des Modèles de la classe. Je suis à l'aide de Newtonsoft de l'Json.Net.
Je reçois des valeurs null dans ma réponse et je ne suis pas sûr si j'ai configurer mes Modèles de corriger ou me manque quelque chose?
Ce que j'essaie de le faire est par exemple, le Prénom et le ReferenceNumber qui sont dans Data\Articles\Employé
Un exemple de ma réponse Json est:
{
"Data": {
"Links": [
{
"Rel": "parent",
"Href": "http://Api/url/",
"Title": "Api",
}
],
"Items": [
{
"Employee": {
"ReferenceNumber": "0078952",
"EmployeeStatus": {
"Name": "Active",
"Value": 2
},
"ContactByPost": true,
"ContactByMarketingEmails": true,
"ClientDetails": [
{
"LimitedCompany": {
"Id": "809f4455-673d-df11-9849-00155d072900",
"Name": "Company"
},
"ClientCompany": {
"Id": "62494f0c-617d-412f-81a3-ca40ef80f774",
"Name": "Company 2"
},
"Code": "G67D",
"RefCode": "1271",
"Date": "\/Date(1333456265000+0100)\/",
"Id": "009ea227-887d-e111-96ec-000c29128cee",
"CreatedOn": "\/Date(1333455954000+0100)\/",
"CreatedBy": {
"Id": "5c2cb5eb-7368-e111-96eb-000c29128cee",
"Name": "System Administrator"
},
"Archived": false
}
],
"Title": {
"Name": "Mr",
"Value": 1
},
"FirstName": "Fred",
"MiddleName": null,
"LastName": "Flintstone",
"KnownAs": null,
"DateOfBirth": "\/Date(315576000000+0000)\/",
"Gender": {
"Name": "Male",
"Value": 1
},
"HomePhoneNumber": "55555555555",
"MobilePhoneNumber": null,
"Addresses": null,
"EmailAddresses": null,
"Id": "009ea227-887d-e111-96ec-000c29128cee",
"CreatedOn": "\/Date(1333455954000+0100)\/",
"CreatedBy": {
"Id": "5c2cb5eb-7368-e111-96eb-000c29128cee",
"Name": "System Administrator"
},
"Archived": false
},
"Links": [
{
"Rel": "list",
"Href": "http://Api/Addresses",
"Title": "Addresses",
"Description": "Get a list of addresses for this Employee."
}
]
}
]
}
}
Mes Modèles sont de configuration comme indiqué ci-dessous:
public class Data
{
public Collection<Links> Links { get; set; }
public Collection<Items> Items { get; set; }
}
public class Items
{
public Employee Employee { get; set; }
}
public class Employee
{
public string ReferenceNumber { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Id { get; set; }
}
public class Links
{
public string Rel { get; set; }
public string Href { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
Dans mon Contrôleur, je suis en train de faire les suivants:
Data data = Newtonsoft.Json.JsonConvert.DeserializeObject<Data>(APIResponse);
Tout ce que je vois lors du débogage d'Objets et de Liens qui sont tous deux nuls. Je ne suis pas vraiment sûr de ce que je fais mal ou comment j'obtiens ce travail afin que je puisse accéder à valeurs dans mon code C#? Toute aide serait appréciée. L'application est MVC3. Les exemples que j'ai vu sont à l'aide de simples json structures.
Vous devez vous connecter pour publier un commentaire.
La chaîne JSON ne rentre pas dans les Données de la classe du point de vue de la deserializer.
Il voit un objet racine avec une seule propriété nommée "Données", alors qu'il s'attend à voir un objet avec des "Éléments" et "liens" propriétés.
Donc construit une instance de Données, et laisse ses propriétés null.
De le fixer, retirez l'emballage de l'objet, de sorte que vous êtes de gauche avec les éléments suivants:
{ "Items" : [..], "Liens" : [...] }
et essayer de la désérialisation de nouveau.
J'ai réussi à résoudre ce problème. Ce que j'ai fait était d'abord de créer la classe mère de traiter les Données de l'objet, comme @Jake a également mentionné. J'ai créé une classe de type ClientDetails que j'ai eu dans la classe Employé comme suit:
Cela a provoqué une erreur comme ClientDetails est un tableau. J'ai changé cela à la suivante:
Cela a réglé le problème, et maintenant, mon ensemble de l'objet de Données est renseignée avec la réponse de l'API.
@Jake, merci pour vos commentaires...