internal Model.BaseMessage DeserializeInternalMessage(string data)
{
var jObject = JObject.Parse(data);
var msgTypeNode = jObject.SelectToken("Type");
if (msgTypeNode == null)
throw new ArgumentException("Missing message type");
var settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter>
{
new StringEnumConverter()
}
};
var jsonSerializer = JsonSerializer.Create(settings);
var msgType = msgTypeNode.ToObject<Model.BaseMessage.MessageTypes>(jsonSerializer);
switch (msgType)
{
case Model.BaseMessage.MessageTypes.Connect:
return jObject.ToObject<Model.ConnectMessage>(jsonSerializer);
case Model.BaseMessage.MessageTypes.Alive:
return jObject.ToObject<Model.AliveMessage>(jsonSerializer);
case Model.BaseMessage.MessageTypes.Payload:
return jObject.ToObject<Model.PayloadMessage>(jsonSerializer);
default:
throw new ArgumentException("Unknown message type " + msgType.ToString());
}
}