Uso di Json.Net, ho delle proprietà nei miei oggetti che richiedono particolare attenzione per serializzarle/deserializzarle. Facendo un discendente di JsonConverter
, sono riuscito a farlo con successo. Questo è il modo comune di fare questo:Registrazione di un JsonConverter personalizzato a livello globale in Json.Net
public class SomeConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
...
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
...
}
public override bool CanConvert(Type objectType)
{
...
}
}
class SomeClass
{
[JsonProperty, JsonConverter(typeof(SomeConverter))]
public SomeType SomeProperty;
}
//Later on, in code somewhere
SomeClass SomeObject = new SomeClass();
string json = JsonConvert.SerializeObject(SomeObject, new SomeConverter());
Il mio problema con questo codice è che ho bisogno di presentare la mia convertitore personalizzato in ogni serializzazione/deserializzazione. Nel mio progetto ci sono molti casi in cui non posso farlo. Ad esempio, sto usando altri progetti esterni che fanno uso di Json.Net e lavoreranno sulle mie istanze SomeClass
. Ma dal momento che non voglio o non posso apportare modifiche nel loro codice, non ho modo di introdurre il mio convertitore.
C'è un modo per registrare il mio convertitore, utilizzando forse un membro static
, in Json.Net, quindi non importa dove si verifica la serializzazione/deserializzazione, il mio convertitore è sempre presente?
Grazie un milione, si ha reso il mio giorno :) – Mehran
ottengo un errore in asp.net web api se faccio questo nel App_Start() evento . 'Metodo non trovato: 'Void Newtonsoft.Json.JsonConvert.set_DefaultSettings' –
@DonnyV. probabilmente stai usando una versione precedente di JSON.NET - continua a compilarla a causa dei reindirizzamenti di versione aggiunti a web.config. – BrainSlugs83