Skip to content

Instantly share code, notes, and snippets.

@jonnii
Created February 6, 2013 22:59
Show Gist options
  • Save jonnii/4726693 to your computer and use it in GitHub Desktop.
Save jonnii/4726693 to your computer and use it in GitHub Desktop.
signalr json serializer with underscores.
public class SignalJsonSerializer : IJsonSerializer
{
public class DefaultingJsonContractResolver : IContractResolver
{
private readonly Assembly _assembly;
private readonly IContractResolver _camelCaseContractResolver;
private readonly IContractResolver _defaultContractSerializer;
public DefaultingJsonContractResolver()
{
_defaultContractSerializer = new DefaultContractResolver();
_camelCaseContractResolver = new UnderscoreContractResolver();
_assembly = typeof(Connection).Assembly;
}
public JsonContract ResolveContract(Type type)
{
if (type.Assembly.Equals(_assembly))
{
return _defaultContractSerializer.ResolveContract(type);
}
return _camelCaseContractResolver.ResolveContract(type);
}
}
private readonly JsonSerializer serializer;
public SignalJsonSerializer()
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new IsoDateTimeConverter());
settings.Converters.Add(new StringEnumConverter());
settings.Converters.Add(new MongoObjectIdConverter());
settings.TypeNameHandling = TypeNameHandling.None;
settings.NullValueHandling = NullValueHandling.Ignore;
settings.ContractResolver = new DefaultingJsonContractResolver();
serializer = JsonSerializer.Create(settings);
}
public object Parse(string json, Type targetType)
{
using (var reader = new StringReader(json))
{
return serializer.Deserialize(reader, targetType);
}
}
public void Serialize(object value, TextWriter writer)
{
var selfSerializer = value as IJsonWritable;
if (selfSerializer != null)
{
selfSerializer.WriteJson(writer);
}
else
{
serializer.Serialize(writer, value);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment