Ho una classe POCO che viene inviata al browser come stringa JSON in .NET 3.5 sp1. Sto solo usando la serializzazione JSON predefinita e ho alcuni campi che voglio ignorare. Voglio mettere un attributo simile a [System.Xml.Serialization.XmlIgnore] su di loro in modo che non siano serializzati.Ignorare un campo durante la serializzazione .NET JSON; simile a [XmlIgnore]?
risposta
Io uso l'attributo ScriptIgnore sul mio modello in questo modo:
public class Item
{
[ScriptIgnore]
public Item ParentItem { get; set; }
}
In questo scenario particolare mi è stato sempre un errore di riferimento circolare del serializzatore JSON, così ho semplicemente ignorato esso. Ero asking a similar question here on SO quando sono stato acceso alla differenza tra un modello e ViewModel.
[ScriptIgnore]
è il tuo huckaberry.
+1 per riferimento Tombstone. – jrummell
In realtà è "Huckle Bearer", ma ti darò un +1 per lo sforzo e il film. :) –
La risposta originale è corretta, dice "huckleberry", non "huckle bearer". http://www.imsdb.com/scripts/Tombstone.html – heisenberg
È sufficiente aggiungere lo [ScriptIgnore(ApplyToOverrides = true)]
nel file modello di testo (.tt).
Ecco una parte del mio modello di testo prima di
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
Una volta inserito il codice di linea sopra il codeStringGenerator
generato il mio classi auto e si presentava così:
[ScriptIgnore(ApplyToOverrides = true)]
public virtual ICollection<Currency> Currencies { get; set; }
Ho anche bisogno di modificare la funzione UsingDirectives
per inserire "using System.Web.Script.Serialization;"
'ApplyToOverrides' sembra essere molto importante su una proprietà virtuale – Todd
Impostare la proprietà come interna. Dipende dalla tua struttura, però. Prendere in considerazione.
E se non è POCO ma EntityModel generato, non voglio modificare il codice generato, c'è una soluzione alternativa per aggiungere l'attributo ScriptIgnore al modello di entità generato. – hazimdikenli
@hazimdikenli potrebbe essere necessario utilizzare la classe parziale per questo. –
Non dimenticare di aggiungere un riferimento a "System.Web.Extensions" perché funzioni correttamente – Levitikon