2012-06-20 18 views
12

Sto lavorando a un progetto ASP.NET WebApi (Release Candidate) in cui sto consumando diversi DTO contrassegnati con l'attributo [Serializable]. Questi DTO sono fuori dal mio controllo quindi non sono in grado di modificarli in alcun modo. Quando torno uno di questi da un metodo get risultante JSON contiene un mucchio di k__BackingFields come questo:Impostazione IgnoreSerializableAttribute Globalmente in Json.net

<Name>k__BackingField=Bobby 
<DateCreated>k__BackingField=2012-06-19T12:35:18.6762652-05:00 

Sulla base della ricerca che ho fatto questa sembra un'impostazione problem with JSON.NET's IgnoreSerializableAttribute e per risolvere il mio problema ho solo bisogno per impostarlo globalmente come suggerisce l'articolo. Come posso modificare questa impostazione globalmente in un progetto API Web ASP.NET?

risposta

33

Ho trovato un modo semplice per sbarazzarsi di k__BackingField nei nomi.

Questo frammento dovrebbe essere da qualche parte nel Application_Start() in Global.asax.cs:

JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings(); 
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = jSettings; 

Sembra che l'impostazione di default si prende cura di esso.

+1

Suggerimento molto utile per chiunque usi MVC4/WebApi! – EkoostikMartin

+0

Questo ha risolto il problema anche per me. – bbrown

+0

Non funziona per me. – Estevez

2

Poiché la libreria non espone un setter statico per DefaultContractResolver, suggerisco di creare un wrapper statico su JsonConvert ed è Serialize */Deserialize * metodi (almeno quelli che si utilizzano).

Nel suo involucro statico è possibile definire un contratto resolver statica:

private static readonly DefaultContractResolver Resolver = new DefaultContractResolver 
{ 
    IgnoreSerializableAttribute = true 
}; 

Questo si può passare ad ogni metodo di serializzazione nel JsonSerializerSettings, dentro il tuo involucro. Poi chiami la tua classe durante il tuo progetto.

L'alternativa sarebbe ottenere il codice sorgente JSON.NET e regolarlo manualmente per utilizzare quell'attributo per impostazione predefinita.

+0

Darò che un colpo. Grazie per l'aiuto! – neonbytes

+0

Dove mettere questa linea? – Estevez

-2

Amici, non dichiarano proprietà come questa:

public String DiscretionCode { get; set; } 

Ma, creano Auxiliar Vars, come il vecchio ....

private String discretionCode; 

public String DiscretionCode 
{ 
    get { return discretionCode;} 
    set { discretionCode = value; } 
} 
+0

Spiega il tuo ragionamento –

Problemi correlati