Per avere una serializzazione coerente tra i vari livelli dell'applicazione, voglio utilizzare la stessa libreria di serializzazione (ServiceStack.Text) per SignalR che uso ovunque.Utilizzo di ServiceStack.Text come serializzatore JSON per SignalR
Mentre successivo SignalR Wiki entry per la sostituzione del usato JSON Serializzatore, ho creato questo gestore di base:
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);
}
}
Integrazione:
var serializer = new SignalrServiceStackJsonSerializer();
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer),() => serializer);
Purtroppo, dopo l'integrazione, il client SignalR JS fa arrivare pacchetti diversi rispetto al serializzatore predefinito. Come sembra, il serializzatore predefinito genera (almeno per i messaggi non utente) JSON con le proprietà con un limite di 1 carattere, che non si verifica dopo la sua sostituzione con ServiceStack.Text. Pertanto, SignalR tenta di accedere a "I" ma ha ricevuto "Id". Non sono riuscito a trovare le rispettive parti del codice sorgente lato server SignalR.
Ho fatto qualcosa di sbagliato o devo creare un wrapper più complesso per usare ServiceStack.Text come serializzatore JSON?
beh questo fa schifo;) ma grazie per averlo chiarito, dovrò vedere come aggiro le differenze in ServiceStack.Text e JSON.Net. – Pharao2k
Hum .. non è una buona notizia. Immagino di dover includere entrambi i serializzatori nella mia app. – Filimindji
Perché MS utilizza un serializzatore JSON SLOW JSON inferiore? ServiceStack.Text, Jil e FastJSON lo hanno picchiato a morte. –