web-dev-qa-db-fra.com

Ignorer un champ pendant la sérialisation .NET JSON; similaire à [XmlIgnore]?

J'ai une classe POCO qui est envoyée au navigateur en tant que chaîne JSON dans .NET 3.5 sp1. J'utilise simplement la sérialisation JSON par défaut et j'ai certains champs que je veux ignorer. Je veux mettre un attribut similaire à [System.Xml.Serialization.XmlIgnore] sur eux afin qu'ils ne soient pas sérialisés.

78
runxc1 Bret Ferrier

J'utilise l'attribut ScriptIgnore sur mon modèle comme ceci:

public class Item
{
    [ScriptIgnore]
    public Item ParentItem { get; set; }
}

Dans ce scénario particulier, je recevais une erreur de référence circulaire du sérialiseur Json, donc je l'ai simplement ignoré. J'étais posant une question similaire ici sur SO quand j'ai été excité à la différence entre un modèle et ViewModel.

118
JMP
[ScriptIgnore] 

est votre huckaberry.

26
Wyatt Barnett

Vous avez juste besoin d'ajouter la [ScriptIgnore(ApplyToOverrides = true)] dans votre fichier de modèle de texte (.tt).

Voici une partie de mon modèle de texte avant

#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#

Une fois que j'ai inséré le code, la ligne au-dessus de codeStringGenerator mes classes a généré automatiquement et ressemblait à ceci:

[ScriptIgnore(ApplyToOverrides = true)]
public virtual ICollection<Currency> Currencies { get; set; }

J'ai également dû modifier la fonction UsingDirectives pour insérer "using System.Web.Script.Serialization;"

2
Alex Boutin Flegel

Définissez la propriété comme interne. Cela dépend de votre structure, cependant. Prendre en considération.

1
hakan