There's not much you can do with the "T obj" unless you inform the compiler what additional interfaces it supports.
E.g.
IRequestHandler.ParseRequest<T>(string request, T obj)
where T : IOrderInfo
{
var req = RequestHandlerGateway.DeserializeFromXml<OrderMessageSalesOrder>(request, "SalesOrder");
obj.OrderId = req.Id;
return true;
}
Assuming IOrderInfo defines the OrderId property, and OrderMessageSalesOrder provides the Id property (or field).
The ref is only needed if you intend to create a new T instance:
IRequestHandler.ParseRequest<T>(string request, ref T obj)
where T : IOrderInfo, new()
{
var req = RequestHandlerGateway.DeserializeFromXml<OrderMessageSalesOrder>(request, "SalesOrder");
obj = new T();
obj.OrderId = req.Id;
return true;
}
If you intend to cast the deserialized object req to obj, the above answers should be sufficient, but then I think you're on shaky ground.