Можно ли передать связанный список из веб-службы C # в функцию JavaScript?
-
06-07-2019 - |
Вопрос
Я создал класс связанного списка в своем коде JavaScript, а затем перевел этот код на C #. Р>
Прямо сейчас у меня есть функция JavaScript, которая вызывает веб-сервис для получения массива имен, функция JavaScript onComplete
затем берет этот массив и превращает его в связанный список. Р>
Можно ли каким-либо образом создать связанный список в веб-службе и передать его обратно для использования в коде JavaScript, или связанные списки могут передаваться неправильно? Р>
Редактировать . Позвольте мне перефразировать мой вопрос, чтобы в нем было немного больше смысла. Если у вас есть пользовательский объект, созданный классом скажем .... класс User, и у этого класса есть переменная с именем user. Если вы передадите объект User: objUser обратно из C # в JavaScript, откуда JavaScript узнает, что он может получить доступ к objUser.userName
? Как насчет возможных методов, которые он может вызывать для этого объекта пользователя?
Решение
У меня был похожий вопрос при создании приложения ASP.NET MVC. По сути, ответ заключается в том, что в JavaScript нет такого же понятия типов, как в C #.
Допустим, вы решили использовать JSON для передачи данных между вашим клиентом и сервером в вашем приложении. Выбор формата JSON, XML, YAML или другого формата не важен.
Сторона сервера
На вашей стороне сервера, в вашем коде C #, вы можете сделать что-то вроде этого (при условии, что вы используете какую-то библиотеку JSON):
var myLinkedList = JsonConvert.DeserializeObject<LinkedList>(json);
Теперь у вас есть переменная myLinkedList типа LinkedList. myLinkedList теперь ведет себя как все экземпляры LinkedList.
Клиентская сторона
Однако на клиентском сайте в вашем коде JavaScript вы, вероятно, делаете что-то вроде этого:
function LinkedList(){
//Constructor for your LinkedList
};
LinkedList.prototype = {
//Various functions to operate on your linked list
};
Вам нужно написать что-то подобное для десериализации данных, которые возвращаются с сервера:
var linkedList = JSON.parse(jsonString);
Обратите внимание, что НЕТ СПОСОБА указывать, что вы хотите, чтобы эти десериализованные данные вошли в LinkedList " класс " что вы определили ранее. JavaScript не понимает, что LinkedList является " классом " что вы добавили функциональность к использованию прототипа. Р>
Вы получаете обратно объект JavaScript. Р>
Один из способов обойти это - сделать что-то вроде этого:
var linkedList = new LinkedList();
var deserializedObject = JSON.parse(jsonString);
linkedList.Items = deserializedObject.Items;
По сути, вам придется скопировать все состояние из десериализованного объекта в переменную связанного списка.