2013-04-25 62 views
8

要讓在我的應用程序層一致的序列化,我想我用在其他地方使用的SignalR相同的序列化庫(ServiceStack.Text)。使用ServiceStack.Text作爲JSON序列爲SignalR

雖然以下SignalR的維基entry更換使用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,其屬性的上限爲1個字符,在使用ServiceStack.Text替換後不會發生。因此,SignalR試圖訪問'我',但它收到'Id'。我無法找到SignalR服務器端源代碼的各個部分。

難道我做錯了什麼或做我必須創建一個更復雜的包裝使用ServiceStack.Text作爲JSON序列?

回答

2

我不打擾。我們對JSON.NET有很深的依賴性,我們甚至在下一個版本中刪除了這種可擴展性。抱歉。

+7

好吧,這很糟糕;)但感謝您清除這個問題,我將不得不看看我如何解決ServiceStack.Text和JSON.Net的差異。 – Pharao2k 2013-04-25 17:07:15

+0

嗡嗡..這不是一個好消息。我想我必須在我的應用程序中包含兩個序列化程序。 – Filimindji 2014-02-04 16:02:13

+0

爲什麼MS使用劣質的JSON SLOW JSON串行器? ServiceStack.Text,Jil和FastJSON擊敗了它。 – 2014-07-19 07:14:15

相關問題