2015-04-13 9 views
18

Mam złożony wykres obiektów, które serializuję/deserializuję z Json.NET. Niektóre obiekty pochodzą z klasy abstrakcyjnej, więc aby deserializacja działała poprawnie, musiałem utworzyć niestandardowy JsonConverter. Jego jedyną rolą jest wybór odpowiedniej konkretnej implementacji abstrakcyjnej klasy w czasie deserializacji i umożliwienie Json.NET kontynuacji.Jak korzystać z domyślnej serializacji w niestandardowym JsonConverter

Mój problem pojawia się, gdy chcę serializować. W ogóle nie potrzebuję nic robić. Chcę uzyskać dokładnie to samo zachowanie, co przy korzystaniu z JsonConvert.SerializeObject bez niestandardowego JsonConverter.

Jednakże, ponieważ używam niestandardowej klasy JsonConverter do moich potrzeb w zakresie deserializacji, jestem zmuszony dostarczyć implementację WriteJson. Ponieważ WriteJson jest abstrakcyjny, nie mogę po prostu zadzwonić pod numer base.WriteJson, ale chcę to zrobić w zasadzie. Moje pytanie brzmi: co mam umieścić w tej metodzie, aby uzyskać domyślne zachowanie Jane? Innymi słowy:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
{ 
    // What goes here to get default processing? 
} 

Odpowiedz

26

w Twojej JsonConverter, zastępują CanWrite i return false:

public override bool CanWrite { get { return false; } } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 

Następnie można po prostu wyrzucić wyjątek od WriteJson, ponieważ nie zostanie wywołana.

+2

To było zbyt oczywiste :). Dzięki! – MuiBienCarlota