using System.Collections.Generic;
public static T GetObjectAs<T>(object source, T destinationType)
return Convert.ChangeType(source, typeof(T)) as T;
public static void Main()
var nameMessage = new MessageWrapper<Name>();
nameMessage.Message = new Name {First="Bob", Last = "Smith"};
string serialized = JsonConvert.SerializeObject(nameMessage);
var deserialized = JsonConvert.DeserializeObject<MessageWrapper>(serialized);
var messageType = Type.GetType(deserialized.MessageType);
dynamic message = JsonConvert.DeserializeObject(Convert.ToString(deserialized.Message), messageType);
Name myname = GetObjectAs(message, System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("Name"));
Console.WriteLine(myname.First);
public class MessageWrapper<T>
public string MessageType { get { return typeof(T).FullName; } }
public T Message { get; set; }
public class MessageWrapper
public string MessageType { get; set; }
public object Message { get; set; }