ASP.NET MVC: Contrôle de la sérialisation des noms de propriété avec JsonResult
Est-il un moyen pour contrôler la sortie JSON de JsonResult
avec des attributs, semblable à la façon dont vous pouvez utiliser XmlElementAttribute
et de ses frères pour contrôler la sortie de la sérialisation XML?
Par exemple, pour la classe suivante:
public class Foo
{
[SomeJsonSerializationAttribute("bar")]
public String Bar { get; set; }
[SomeJsonSerializationAttribute("oygevalt")]
public String Oygevalt { get; set; }
}
J'aimerais pour ensuite obtenir la sortie suivante:
{ bar: '', oygevalt: '' }
Par opposition à:
{ Bar: '', Oygevalt: '' }
- Découvrez la nouvelle édition de la Sierra: kohari.org/2009/08/10/siesta-painless-rest-via-asp-net-mvc
- Ça a l'air prometteur (et intéressant!), mais je m'attendais à quelque chose de déjà cuit. Une façon d'obtenir de l'existant sérialiseur à l'égard de la DataContract attributs?
Vous devez vous connecter pour publier un commentaire.
Je voulais quelque chose d'un peu plus cuit dans le cadre de ce que Jarrett a suggéré, voici donc ce que j'ai fait:
JsonDataContractActionResult:
JsonContract() la méthode, ajouté à ma classe de contrôleur de base:
Exemple D'Utilisation:
Remarque: Si vous êtes à la recherche de quelque chose de plus performant que JsonDataContractSerializer, vous pouvez faire la même chose à l'aide de JSON.NET au lieu de cela. Alors que JSON.NET ne semble pas utiliser DataMemberAttribute, il possède son propre JsonPropertyAttribute qui peut être utilisé pour accomplir la même chose.
JsonDataContractActionResult
classe peut être simplifié davantage si vous héritez deJsonResult
au lieu de la baseActionResult
- alors vous n'avez qu'à remplacer leExecuteResult
méthode!Voici ma mise en œuvre de Daniel Schaffer réponse, avec les améliorations suggérées par Justin Rusbatch et Daniel incorporated.
DataContractJsonSerializer
est toujours pas pris en charge directement dans MVC 4, donc c'est une solution élégante.Je sais que c'est une vieille question, mais pour ceux qui sont à la recherche pour juste comment éviter les propriétés d'être sérialisé utiliser le ScriptIgnoreAttribute dans l'espace de noms System.Web.Script.La sérialisation. Malheureusement toujours pas controler le nom de la sérialisé propriétés, mais quelqu'un pourrait trouver cela utile.
Sera de sortie en tant que résultat Json suivantes:
C'est la solution à utiliser NewtonSoft Json.Net (pour la performance)
J'ai trouvé une partie de la solution ici et SI
De sorte que, dans mon contrôleur, je peux le faire
Dans mon modèle, je peux maintenant avoir:
Remarque que maintenant, vous devez définir le
JsonPropertyAttribute
pour chaque propriété que vous souhaitez sérialiser.La réponse est facile: la
DataContractJsonSerializer
doit respecter les[DataContract]
et[DataMember]
attributs dans le Système.Moment de l'exécution.La sérialisation de l'espace de noms de la BCL.