Created
February 6, 2013 22:59
-
-
Save jonnii/4726693 to your computer and use it in GitHub Desktop.
signalr json serializer with underscores.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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