11
votes

Désériorize réponses JSON contenant des attributs qui conflit avec des mots-clés

Il y a une API que je ne contrôle pas, mais dont la sortie que je dois consommer avec C #, de préférence à l'aide de json.net.

Voici un exemple de réponse: P>

class Media {
    public int media_id;
    public int explicit_;
}


0 commentaires

3 Réponses :


12
votes

C # vous permet de définir des membres avec des noms de mots réservés (pour les cas d'interopérabilité exactement comme celui-ci) en leur échappant avec un @, par exemple, xxx

Je ne sais pas comment cela joue avec JSON.NET, Mais j'imagine que cela devrait fonctionner (puisque le @ est une évasion et ne faisait pas partie du nom de champ).


3 commentaires

Je comprends ce que vous dites, mais pouvez-vous fournir un lien vers une explication plus poussée? J'ai essayé ceci w / ce changement: "var x = nouveau support (); x.explicit = true;" Ne compilerait pas, mais "x. @ Explicit = vrai" a fait.


Dans votre code, vous utiliseriez "@Explicit". Mais cela est compilé à un nom réel de "explicite" dans le binaire. Donc, le code de sérialisation / de désérialisation JSON.NET verrait "explicite", pas "@Explicit". Tout comme lorsque vous utilisez "\ n" dans votre code, mais il est compilé dans une surface limite dans le binaire.


Je vois, merci. Toujours accepté la réponse JsonProperty, car elle est spécifique à ce domaine et gère également plus de cas généraux.



19
votes

1 commentaires

Bravo, j'ai sauté sur celui-ci parce que le TOC a déclaré "sérialiser" quand je voulais désexerimation. Merci pour le pointeur.



1
votes

Le code suivant a fonctionné pour moi.

class JsonRpc {
  public string id;
  public string method;
  public string[] @params;
}
JsonConvert.DeserializeObject<JsonRpc> (data)


0 commentaires