public override object Deserialize(Stream serializationStream, Type t)
{
var ret = t.GetConstructor(new Type[] {}).Invoke(new object[] {});
var typeProp = OrderAttribute.GetPropertyByOrder(t, 0);
var enumFormatter = _typeFormatterFactory.GetFormatter(typeProp.PropertyType);
var enumValue = enumFormatter.Deserialize(serializationStream, typeProp.PropertyType);
typeProp.SetValue(ret, enumValue, null);
var index = ((int) enumValue) + 1;
var prop = OrderAttribute.GetPropertyByOrder(t, index);
if (prop != null)
{
var subType = prop.PropertyType;
var subFormatter = _typeFormatterFactory.GetFormatter(subType);
var subObj = subFormatter.Deserialize(serializationStream, subType);
prop.SetValue(ret, subObj, null);
}
return ret;
}