2009-09-11 7 views

risposta

117

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.

+1

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

+0

@hazimdikenli potrebbe essere necessario utilizzare la classe parziale per questo. –

+11

Non dimenticare di aggiungere un riferimento a "System.Web.Extensions" perché funzioni correttamente – Levitikon

26
[ScriptIgnore] 

è il tuo huckaberry.

+4

+1 per riferimento Tombstone. – jrummell

+1

In realtà è "Huckle Bearer", ma ti darò un +1 per lo sforzo e il film. :) –

+8

La risposta originale è corretta, dice "huckleberry", non "huckle bearer". http://www.imsdb.com/scripts/Tombstone.html – heisenberg

2

È 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;"

+0

'ApplyToOverrides' sembra essere molto importante su una proprietà virtuale – Todd

1

Impostare la proprietà come interna. Dipende dalla tua struttura, però. Prendere in considerazione.

Problemi correlati