public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } // Read the message type and serialize accordingly JToken value; string typeCode = null; var json = JObject.ReadFrom(reader) as JObject; if (json.TryGetValue("mt", out value) == true && value.Type == JTokenType.String) { typeCode = value.ToString(); } var type = RealTimeMessage.GetType(typeCode); if (type != null) { return(new JsonSerializer().Deserialize(json.CreateReader(), RealTimeMessage.GetType(typeCode))); } else { return(null); } }