-1
votes

Pourquoi les champs d'objet désérialisés sont-ils aussi nuls lorsque des données existent?

J'ai un objet JSON que j'ai besoin de désérialiser, j'utilise JSON.net pour faire ces opérations.

Quand c'est un objet simple, c'est assez facile de le faire, mais je ne peux pas comprendre comment désérialiser cette chaîne

JSON xxx

maintenant le code que j'ai jusqu'à présent: xxx

somme des valeurs de l'objet désérialisé sont NULL, même si le JSRONTRINGING définitivement des données.

Comment puis-je continuer ici?


5 commentaires

Dupliqué possible de désériialiser json avec c #


Un moyen facile de générer un modèle consiste à Coller Json en tant que classes à l'heure actuelle, votre modèle ne correspond pas à votre JSON.


@Jlalonde Pourquoi la question est-elle en double, je pense que le Json je demande de l'aide est plus complexe.


Vous devriez être capable de désérialiser le JSON directement dans l'objet. Quelque chose sur les lignes de var objet = jsonconvert.deserializeObject > (jsonstring); (remplacer > correspondant à la classe souhaitée)


Erick. Presque n'importe quel JSON arbitraire peut être désérialisé à l'aide de JSONCONVERT dans JSON.NET. Je serais d'accord si cela disait polymorphe. Mais finalement je crois que c'est un duplicata.


3 Réponses :


0
votes

Vous devez créer un constructeur pour la classe de liaison API afin que vous puissiez procéder comme suit:

public ApiLink(JObject json)
{
    Consensts = (string[])json["consents"];
    ...
}


3 commentaires

@Ericksantander Je viens de réaliser que l'API-List Json est un peu bizarre. Il semble s'agir d'une liste mais il n'y a qu'un seul élément, il pourrait y avoir plus de boucles impliquées, avez-vous un exemple avec une liste d'API non vide? Je viens aussi de modifier ma réponse pour être plus en ligne avec ce que je vois.


J'ai remarqué, il dit que cela ne peut pas convertir en chaîne [], je n'ai pas d'API-Link non vide, je ne pouvais tout simplement ajouter d'éléments à la main.


La réponse dépend vraiment de ce que ressemblerait une API-Link peuplée. À l'instar de maintenant, il semble que vous n'ayez qu'un consentement / paiement par élément de la liste API-Link. Dans ce cas, envoyez le constructeur un jarray et en boucle pour remplir les tableaux.



2
votes

La façon dont votre JSON est structuré:

public class RootJsonObject {
    public IEnumerable<Aspsp> Aspsp-list {get; set;}
}


2 commentaires

J'ai fait comme vous l'avez dit et avez réussi à ne pas lancer une exception lors de la désérialisation de l'objet. Il ne pouvait pas être ienumerable cependant, car cela me donnait une erreur disant qu'il devait s'agir d'un tableau, le problème était que je faisais un constructeur sur la classe ASPPlistresponseresource et dans les noms des champs (fixe avec JSONPROPERTY (Nom de la propriété = "")), et il remplaçait le constructeur vide, alors après avoir créé un constructeur vide, je peux maintenant désérialiser. Mais l'objet a des champs alors que NULL était maintenant que cela ne devrait pas. Je vais mettre à jour la question, aidez-moi s'il vous plaît si vous le pouvez.


Je regarderais Json Convertir. Vous pouvez rendre cela beaucoup plus facile.



1
votes

J'ai réussi à le faire fonctionner maintenant, mon problème n'était pas exactement que je ne pouvais pas désérialiser à cause des types de données ou de la structure (au moins pas complètement, ce qui dit que la structure était fausse était en partie correcte).

Donc, c'est comme ça que j'ai résolu le problème:

-> Créé un costructeur vide sur la classe aspsplistresponseresource , de sorte que la méthode jsonconvert.deserializeObject ( jsonstring) pourrait créer une instance de l'objet, j'ai pensé à cela puisque le seul constructeur a pris une chaîne , et il n'y avait donc pas d'autre contorateur pour jsonconvert à Utilisez.

-> Mettez les noms de champs de l'aide de [JSONProperty (nom de propriété = ")] , mais cela m'a toujours donné l'objet désérialisé comme null ou avec quelques champs nuls.

-> a commenté les champs transaction et Fundconfirmations du APILINK classe, ces champs étaient dans la documentation de l'API Web, donc je mets T ourlet, mais je regarde la chaîne de Json je reçois, on dirait qu'ils ne sont pas utilisés, je ne les ai donc pas commentés

et après ces modifications, le code fonctionne maintenant parfaitement:

le code: xxx


0 commentaires