2013-04-25 5 views
8

アプリケーションレイヤ間で一貫したシリアライゼーションを行うには、他のどこでも使用するSignalRと同じシリアライゼーションライブラリ(ServiceStack.Text)を使用します。ServiceStack.TextをSignalRのJSONシリアライザとして使用

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

統合:残念ながら

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

、それを統合した後、SignalR JSクライアントが取得ん

は、使用済みのJSONシリアライザを交換するためのSignalRのウィキ entryに従いながら、私はこの基本的なハンドラを作成しましたデフォルトのシリアライザとは異なるパッケージです。そのように見えるように、デフォルトのシリアライザは、少なくとも1文字に制限されたプロパティを持つJSONを生成します(これはServiceStack.Textで置き換えられません)。したがって、SignalRは 'I'にアクセスしようとしますが、 'Id'を受信しました。私はSignalRサーバー側のソースコードのそれぞれの部分を見つけることができませんでした。

私は何か間違っているか、JSONシリアライザとしてServiceStack.Textを使用するために、より複雑なラッパーを作成する必要がありますか?

答えて

2

私は気にしませんでした。私たちはJSON.NETに深く依存しており、次のリリースでこの拡張性を削除しました。ごめんなさい。

+7

)sucks;)しかし、これをクリアしてくれてありがとう、私はServiceStack.TextとJSON.Netの違いをどのように回避するかを見なければなりません。 – Pharao2k

+0

ハム..良いニュースではありません。私は私のアプリに両方のシリアライザを含める必要がありますね。 – Filimindji

+0

MSは下位のJSON SLOW JSONシリアライザを使用しているのはなぜですか? ServiceStack.Text、Jil、FastJSONはそれを打ち負かす。 –

関連する問題