Мне лично нравится создавать библиотеки с расширениями для классов
public static List<TTo> Cast<TFrom, TTo>(List<TFrom> fromlist)
where TFrom : class
where TTo : class
{
return fromlist.ConvertAll(x => x as TTo);
}
Как вы можете видеть, ваш результат data2
является правильным, потому что ваш параметр равен data2
и значение игнорируется для обрезки, в то время как в data1
это объект json, поэтому вы должны поместить data1.name
в исключение массив, чтобы игнорировать его.