Итерация по списку объектов JSON, предоставленному веб-сервисом ASP.NET - PullRequest
2 голосов
/ 24 ноября 2010

У меня есть метод веб-службы 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, чтобы я мог перебирать элементы объекта в нем?

1 Ответ

1 голос
/ 24 ноября 2010

Вы не должны вручную сериализовать JSON. ScriptService сделает это для вас автоматически, если вы определите его следующим образом:

[WebMethod]
public List<Construct> GetConstructList()
{
  return new ConstructList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...