Json.NET JsonConvert.DeserializeObject() retourne la valeur null
j'ai essayé de Désérialiser cette chaîne :
string _jsonObject = {\"Ad\":{\"Type\":\"Request"\,
\"IdAd\":\"xxx@xxx.com\",
\"Category\":\"cat\",
\"SubCategory\":\"subcat\"},
\"Position\":{\"Latitude\":\"38.255\",
\"Longitude\":\"1.2\",
\"Imei\":\"0123456789\"};
}";
Message _message = JsonConvert.DeserializeObject<Message>(_jsonObject);
Fonctionne assez de "Ad", mais pas l'instancier "Position".
Une idée ?
Serialize
ouDeserialize
? Où est vos déclarations? code?- en.wiktionary.org/wiki/instanciate
Vous devez vous connecter pour publier un commentaire.
Dans l'intérêt d'aider les autres qui peut être confronté à ce problème, ou celle relative à l'informatique...
Dans mon cas, j'ai eu un objet avec une foule d'autres objets, et l'une des référence de type de propriétés sur ces sous-objets a toujours été nulle après la désérialisation. J'ai essayé toutes sortes de choses, y compris le téléchargement de la JSON.Net source et marcher à travers elle pour trouver le point de défaillance.
Pour faire une longue histoire courte, le problème a été, bien sûr, ma propre. Voici une version très simplifiée de mon JSON et les classes.
JSON
Classes
Ce qui se passait, c'est que, parce que le
Owner
propriété est apparu dans le JSON avant laOwnerId
de propriété, lorsque leOwnerId
propriété a été définie, le setter code a déterminé que la valeur actuelle n'était pas la même que la valeur définie (puisque la valeur est null), de sorte que l'ensemble de laOwner
de la propriété à la valeur null.Pour le fixer j'ai aussi vérifier la valeur définie à l'encontre de l'id de la
Owner
objet en tant que bien, et passez réglageOwner
à la valeur null si elles sont les mêmes.Certes, la cause de mon problème ne peut pas être la même pour tout le monde, mais c'est au moins une mise en garde de double-vérifier ce qui se passe quand vos objets sont en cours d'initialisation lors de la désérialisation.
J'ai oublié de faire les propriétés publiques. N'oubliez pas de le faire...
{ get; private set; }
était mon problème!!!!!{ get; internal set; }
Je ne sais pas comment vous essayez de désérialiser, mais cela devrait fonctionner....
\"Request"\,
Assurez-vous que le nom de tableau JSON matches avec le nom de la propriété dans votre classe
Illustrant (voir "Composants"):
JSON:
Classe:
Désérialiser:
Dans mon cas, il n'est plus subtile erreur. Il est facile d'ajouter ou d'espaces dans le json touches par erreur. Lorsque cela se produit, la clé n'est pas reconnue, et la tentative de désérialiser définit la valeur null.
Par exemple:
{" id": 123}
Cette
id
champ n'est pas reconnu à cause de la espace" id"
. Pour la fixer, fixer le json pour avoir plutôt"id"
.Mon problème est que j'ai été y compris le nom de la classe au début de ma chaîne JSON. J'ai eu copie-collé de la sérialisé sortie d'une autre classe que contenait celui que je voulais désérialiser et j'avais délibérément inclus le nom de la classe en pensant que c'était la bonne chaîne JSON. Une fois que j'ai enlevé le nom de la classe de ma chaîne JSON, il désérialisé l'amende juste.
Cet article a été utile dans la réalisation de ce: https://social.msdn.microsoft.com/Forums/windowsapps/en-US/4d766a28-ff38-477f-8abf-48ed01f74cd2/jsonconvertdeserializeobjectlttgtjsonstring-returning-all-propertieslttgt-as-null?forum=wpdevelop
Je n'ai pas vu cette réponse ici, donc je suis dont il, en espérant que ça aide ceux qui en ont fait la même stupide erreur que moi.