Okay, it’s not really a “solution” per se, but more of a workaround to a limitation with generic List objects that has to do with covariance and contravariance.
I struggled with this for way too long, hope you save you some time.
I have a list that contains a Heavy object that I don’t want to serialize down to the client. So I created a Slim version of it with an explicit operator to convert from Heavy to Slim.
public class WorkItem
This works great when explicitly casting a single Heavy object to a Slim object like so:
var workItem = new WorkItem();
But you get “Unable to cast object of type ‘[type1]’ to type ‘[type2]’.” when you try to cast a List<WorkItem> to List<WorkItemSlim>
I spent a lot of timing looking at my explicit operator trying to figure out what I did wrong, but after some searching I discovered that a List<T> isn’t supported at runtime.
So the (not so great) solution is to convert each object of the list (one by one) to the other type.
var workItemSlimList2 = workItemList.ConvertAll(m => (WorkItemSlim)m);
I hope I saved you some time.