2015-05-08 2 views
2

Я создал веб-службу (asmx-файл), которая возвращает сериализованный ListItemCollection со следующим кодом.C# ListItemCollection для JSON, сохраняя значения и текстовые элементы

public string getStates(string Country) 
    { 
     ListItemCollection lic = DBInterface.GetStates(Country); 

     var serialized = JsonConvert.SerializeObject(lic); 

     return serialized; 
    } 

Я вызываю веб-службу через javascript, когда пользователь выбирает страну из выпадающего списка, используя следующий код.

  //ajax function that uses web services to get states 
     function GetStates(val) 
     {     
      $.ajax({ 
       type: "POST", 
       url: "/WebServices/getServerData.asmx/getStates", 
       data: JSON.stringify({Country: val}), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        $("#ddlState").empty(); 
        var parsed = JSON.parse(data.d); 
        for (var i = 0; i < parsed.length; i++) { 
         $("#ddlState").append("<option value='" + parsed[i] + "'>" + parsed[i] + "</option>"); 
        } 
       }, 
       error: function (data) { 
        alert(data.status + " " + data.statusText); 
       } 
      });      
     } 

Вопрос заключается в том, что я хочу, чтобы и сохранить не только текст ListItemCollection, но и это значение. Однако «JsonConvert.SerializeObject возвращает только текстовые элементы. Может кто-то поможет вернуть значение и текст, так что я могу заполнить ниспадающее меню с помощью JavaScript?

Спасибо!

+0

могли бы вы объяснить, что вы имеете в виду значение – geo

+0

Ну, ListItemCollection состоит из множества ListItems (его массива элементов списка), элементы списка имеют свойство text, а также свойство value. Когда вы привязываете ListItemCollection к выпадающему списку, каждый элемент будет иметь привязанность к тексту и значению. Например, город «Техас» имеет значение 23443 (которое я использовал в качестве ключа в своей базе данных). Я не очень хорошо знаком с объектами JSON, но вижу, что SerializeObject создает целую кучу элементов, таких как {«Техас», «Луизиана», ...} Я хотел бы, чтобы это было что-то вроде { «Ценность»: 2344 , «Текст»: «Техас» } – Eliseo

ответ

3

Одна вещь, которую вы можете использовать JavaScriptSerializer() в System.Web.Script.Serialization :

ListItemCollection lic = new ListItemCollection() { 
    new ListItem("Display Text", "val1"), 
    new ListItem("Display Text 2", "val2"), 
}; 

var ser = new JavaScriptSerializer(); 
var serialized = ser.Serialize(lic); 

Результаты в (я взял на себя смелость формат):

[ 
    { 
     "Attributes": { 
      "Keys": [], 
      "Count": 0, 
      "CssStyle": { 
       "Keys": [], 
       "Count": 0, 
       "Value": null 
      } 
     }, 
     "Enabled": true, 
     "Selected": false, 
     "Text": "Display Text", 
     "Value": "val1" 
    }, 
    { 
     "Attributes": { 
      "Keys": [], 
      "Count": 0, 
      "CssStyle": { 
       "Keys": [], 
       "Count": 0, 
       "Value": null 
      } 
     }, 
     "Enabled": true, 
     "Selected": false, 
     "Text": "Display Text 2", 
     "Value": "val2" 
    } 
] 
+0

это могло бы сделать работу – geo

+0

Это отлично получило данные! Спасибо, кстати, я ненавижу задавать вопрос об этом, но как вы читаете его в javascript правильно? Я на правильном пути в соответствии с вышеизложенным? – Eliseo

+1

@Eliseo Я не считаю, что вам нужно разобрать ответ с сервера, поскольку вы передали в 'dataType: 'json'', но он выглядит иначе. – jdphenix

Смежные вопросы