2013-04-25 14 views
8

Aby mieć spójną serializację na moich warstwach aplikacji, chcę użyć tej samej biblioteki Serializacji (ServiceStack.Text) dla SignalR, której używam wszędzie indziej.Używanie ServiceStack.Text jako JSON Serializer dla SignalR

Idąc SignalR Wiki entry zastąpienia używane JSON serializatora, stworzyłem tę podstawową Handler:

public class SignalrServiceStackJsonSerializer : IJsonSerializer 
{ 
    public void Serialize(object value, TextWriter writer) 
    { 
     var selfSerializer = value as IJsonWritable; 
     if (selfSerializer != null) 
      selfSerializer.WriteJson(writer); 
     else 
      JsonSerializer.SerializeToWriter(value, writer); 
    } 

    public object Parse(TextReader reader, Type targetType) 
    { 
     return JsonSerializer.DeserializeFromReader(reader, targetType); 
    } 
} 

Integracja:

var serializer = new SignalrServiceStackJsonSerializer(); 
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer),() => serializer); 

Niestety, po zintegrowanie jej klient SignalR JS ma nic różne pakiety niż z domyślnym serializerem. Jak wygląda, domyślny serializator generuje (przynajmniej dla wiadomości nie będących użytkownikami) JSON z właściwościami ograniczonymi do 1 znaku, który nie występuje po zastąpieniu go przez ServiceStack.Text. Tak więc SignalR próbuje uzyskać dostęp do "I", ale otrzymało "Id". Nie mogłem znaleźć odpowiednich części kodu źródłowego serwera SignalR.

Czy zrobiłem coś złego, czy muszę utworzyć bardziej złożone opakowanie do korzystania z ServiceStack.Text jako serializator JSON?

Odpowiedz

2

Nie zawracałbym sobie głowy próbowaniem. Mamy głęboką zależność od JSON.NET i nawet usunęliśmy tę rozszerzalność w następnej wersji. Przepraszam.

+7

dobrze, że jest do bani;) ale dzięki za wyczyszczenie tego, będzie musiał zobaczyć, jak pracuję wokół różnic w ServiceStack.Text i JSON.Net. – Pharao2k

+0

Hum ... to nie jest dobra wiadomość. Sądzę, że muszę włączyć oba serializatory do mojej aplikacji. – Filimindji

+0

Dlaczego stwardnienie rozsiane używa niższego serializatora JSON SLOW JSON? ServiceStack.Text, Jil i FastJSON pokonają go na śmierć. –

Powiązane problemy