public override void Serialize(Stream serializationStream, object obj)
{
var typeProp = OrderAttribute.GetPropertyByOrder(obj.GetType(), 0);
var enumFormatter = _typeFormatterFactory.GetFormatter(typeProp.PropertyType);
var enumValue = typeProp.GetValue(obj, null);
enumFormatter.Serialize(serializationStream, enumValue);
var index = ((int) enumValue) + 1;
var subProp = OrderAttribute.GetPropertyByOrder(obj.GetType(), index);
if (subProp != null)
{
var subType = subProp.PropertyType;
var subFormatter = _typeFormatterFactory.GetFormatter(subType);
subFormatter.Serialize(serializationStream, subProp.GetValue(obj, null));
}
}