7
votes

Comment définir JSON.NET ContractSerializer pour un certain type spécifique au lieu de globalement?

Je veux définir un sérialiseur de contrat uniquement pour certains types de mon application ASP.NET Web API. Je peux définir les paramètres globalement dans l'app_start / formatterconfig.cs comme ceci: xxx

...

mais comment puis-je simplement appliquer ceci à une ou plusieurs catégories spécifiques les types?

La raison pour laquelle je veux faire ceci est parce que je dois pouvoir définir les champs serialisés à l'exécution en fonction de la configuration ou des paramètres du service Web similaire à ces exemples:

Utiliser JSON. Net, comment empêcher les propriétés de sérialisation d'une classe dérivée, utilisée dans un contexte de classe de base?

http://json.codeplex.com/discussions/347610


0 commentaires

3 Réponses :


4
votes

Vous avez quelques options:

  • Créez un type personnalisé géré par un formateur personnalisé. Ce type personnalisé pourrait spécifier (d'une certaine manière) quels champs doivent être sérialisés (et cette information puis introduite dans un sérialiseur JSON)
  • regarder la configuration par contrôleur (voir ici ) pour essayer de configurer le formateur comme requried

1 commentaires

Votre première option m'a amené à créer un JSON personnalisé qui est plus bas niveau qu'un formateur, mais je n'ai pas pu comprendre comment spécifier un formateur pour un type particulier.



0
votes

J'essaierais de créer quelque chose comme celui-ci xxx

puis insérez-le dans le début de la collection Formatters


1 commentaires

Il semble seulement choisir le formateur une fois par demande sur la base du type de l'objet racine qui est sérialisé. Cela ne fonctionnera pas dans mon cas car j'ai un objet wrapper que je ne veux pas appliquer les paramètres.



1
votes

J'ai fini par utiliser un Jsonconverter qui écrit uniquement les paramètres spécifiés dans la liste "Propriétés". C'est plus bas niveau qu'un contractrésolver ou un formateur, mais je ne pense pas qu'il soit possible de configurer l'un ou l'autre de configurer un pour un type spécifique.

[JsonConverter(typeof(ResourceConverter))]


0 commentaires