2013-04-25 18 views
8
için JSON Serileştiricisi Olarak Kullanma

Uygulama katmanlarımda tutarlı bir serileştirme sağlamak için, her yerde kullandığım SignalR için aynı Serileştirme kitaplığını (ServiceStack.Text) kullanmak istiyorum.ServiceStack.Text'i, SignalR

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); 
    } 
} 

Entegrasyon:: Maalesef

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

, onu entegre sonra, SignalR JS istemci alıyor

kullanılan JSON Serializer değiştirilmesi için SignalR en Wiki entry izlerken, bu temel işleyicisi yarattı varsayılan seri hale getiriciden farklı paketler. Göründüğü gibi, varsayılan seri hale getirici, (en azından kullanıcı olmayan iletiler için) JSON'u, 1 karakterle sınırlanmış özelliklere sahip üretir; bu, ServiceStack.Text ile değiştirildikten sonra oluşmaz. Böylece, SignalR 'I' erişmeye çalışır ancak 'Id' aldı. SignalR sunucu tarafı kaynak kodunun ilgili bölümlerini bulamadım.

Yanlış bir şey mi yaptım veya ServiceStack.Text'i bir JSON serializer olarak kullanmak için daha karmaşık bir sarıcı oluşturmak zorunda mıyım?

cevap

2

Denemekten rahatsız olmazdım. JSON.NET üzerinde derin bir bağımlılığımız var ve bir sonraki sürümde bu genişletilebilirliği bile kaldırdık. Afedersiniz.

+7

bu kadar berbat;) ama bunu temizlemek için teşekkürler, ServiceStack.Text ve JSON.Net'teki farklar etrafında nasıl çalıştığımı görmek zorunda. – Pharao2k

+0

Hum .. bu iyi bir haber değil. Sanırım her iki seriyi de uygulamanıza eklemeliyim. – Filimindji

+0

MS neden düşük JSON SLOW JSON serializer kullanıyor? ServiceStack.Text, Jil ve FastJSON onu öldürdü. –