10
votes

Comment faire un objet C # de JSON

Je reçois la réponse suivante d'un service WebService: xxx

Comment l'objet JSON doit-il ressembler à désérialiser cela?

ou y a-t-il une autre façon d'obtenir le valeurs des propriétés?


4 commentaires

Voulez-vous le désérialiser?


Que voulez-vous faire avec les informations une fois que vous l'avez dans votre programme? Bien que vous puissiez le désérialiser dans un objet, cela pourrait être du travail que vous pouvez éviter, en fonction de votre objectif.


Vous avez déjà un objet JSON. Voulez-vous dire comment le traduire en un objet C #? Si oui, faites une classe avec les propriétés chemin , minversion , maxversion et utilisez quelque chose comme JSON.NET pour désespérer.


@Tragedian - Je veux avoir accès aux propriétés. Quelque chose comme data.foohugoinfo.path. Mais je n'ai que cette chaîne et je ne veux pas analyser ceci.


4 Réponses :


1
votes

Consultez ce site: http://json2cshaarp.com/

Coller dans la chaîne JSON et il générera des cours pour vous. J'utilise généralement cela dans la main avec JSON.NET pour désherialiser une instance de l'objet racine.


2 commentaires

Veuillez regarder le Json plus soigneusement et remarquer le foo.hugo.info et foo.fritz.task clés. Regardez maintenant ce que le site que vous avez suggéré généré pour la catégorie data est assez inutile.


Bon point. Je n'ai pas eu de problème avec le site avant. +1 pour votre meilleure réponse.



7
votes

avec le json.net bibliothèque C'est assez trivial: xxx < P> et ensuite: xxx

dans cet exemple, j'ai utilisé un dictionnaire dictionnaire objet pour modéliser les 2 clés complexes ( foo.hugo.info et foo.fritz.task ) Parce qu'ils contiennent des noms qui ne peuvent pas être utilisés dans un membre .NET.


2 commentaires

Une raison pour le bowvote? S'il vous plaît laissez un commentaire lorsque la descente expliquait pourquoi cette réponse est fausse.


C'est exactement ce dont j'ai besoin! En outre, il utilise un dictionnaire et peut gérer plus de deux entrées de données. Merci!



5
votes

Si vous utilisez VS2012 ou plus, vous pouvez effectuer ce qui suit:

public class Rootobject
{
    public Data data { get; set; }
    public bool success { get; set; }
}

public class Data
{
    public FooHugoInfo foohugoinfo { get; set; }
    public FooFritzTask fooFritzTask { get; set; }
}

public class FooHugoInfo
{
    public string path { get; set; }
    public int minVersion { get; set; }
    public int maxVersion { get; set; }
}

public class FooFritzTask
{
    public string path { get; set; }
    public int minVersion { get; set; }
    public int maxVersion { get; set; }
}


3 commentaires

Tout exemple de code sur quel sériialiseur vous utiliseriez pour désérialiser le JSON montré dans l'op pour ces classes? Je suis particulièrement intéressé par le foohugoinfo et FOOFRITZTASK Propriétés.


Cela peut ne pas répondre à la question de l'OP pleinement, mais je dois dire ... Mind = Blown. Je n'avais aucune idée de ce qui se cache sous le menu Edition jusqu'à présent.


Ce n'est pas flexible si une troisième variante est ajoutée, vous devez créer une autre classe et ajouter ceci à la classe de données en tant que propriété.



1
votes

Vous pouvez utiliser DataContractJsonSerializer xxx

édition: même classe pour info et tâche


2 commentaires

Vous auriez pu utiliser la même classe pour info et . Autre que cela, bonne et complète réponse, +1.


Cela fonctionne bien, mais ce que j'ai oublié d'écrire, c'est que les données: est dynamique. Il peut s'agir de tout nombre d'articles différents, mais à chaque fois avec le chemin, la minversion et les membres Maxversion. Seuls les noms (foo.hugo.info / foo.fritz.task) peuvent varier.