У меня есть метод веб-службы ASP.NET, который возвращает список универсальных элементов (List '<' Construct>), сериализованный как JSON, используя такой код:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class TestService : System.Web.Services.WebService {
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetOccupationListJSON(int SOCLevel)
{
Construct NewConstructList = new ConstructList();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(ConstructList.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, NewConstructList);
string json = Encoding.Default.GetString(ms.ToArray());
return json;
}
}
Затем я использую jQuery для вызова этого метода и получения данных JSON, например:
function GetCustomerList() {
$.ajax({
type: "POST",
url: "/WebService.asmx/GetConstructList",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) { LoadConstructData(data.d); },
failure: function() { alert("Sorry, we were unable to find the constructs."); }
});
}
Результат JSON выглядит следующим образом:
[
{
"ConstructLabel": "Construct label 1",
"ConstructType": 2,
},
{
"ConstructLabel": "Construct label 2",
"ConstructType": 3,
}
]
Затем я хочу перебрать элементы в ConstructList в данных JSON. Эта функция вызывается при успешном вызове jQuery Ajax:
function LoadConstructData(data) {
for (var i = 0, len = data.length; i < len; ++i) {
var Construct = data[i];
var ConstructLabel = Construct.ConstructLabel
var ConstructType = Construct.ConstructType;
}
}
Я предполагал (от поиска в другом месте), что доступ к данным JSON через индекс предоставит мне доступ к базовому объекту по этому индексу, чтобы я мог затем работать с ним для доступа к его свойствам.
Однако, когда i=0
и я var Construct = data[i];
, я получаю символ в позиции i массива данных ([), а на следующей итерации я получаю второй символ ({). Ясно, что я обращаюсь к элементам массива строк, а не к объекту данных JSON.
Как мне убедиться, что данные, возвращаемые веб-сервисом, попадают в правильный формат JSON, чтобы я мог перебирать элементы объекта в нем?