У нас была похожая проблема. При базовой настройке вызова ajax Webmethod и jquery с 2.0 он возвращает строку (строка типа в js) или строковый массив (тип объекта в js), в 3.5 он всегда возвращает объект, а при возврате фактические данные находятся ниже .d примитив, такой как строка или массив строк.
Моим лучшим решением до сих пор был метод javascript для проверки .d.
function getResponse(r){
if(r.d!=null){
return r.d;
}else{
return r;
}
}
Я должен поддержать как 2.0, так и 3.5 вызовы для перехода, и мне не придется тратить слишком много энергии, так как 2.0 скоро не будет.
Но я бы предпочел лучшее решение.