Можно ли передать связанный список из веб-службы C # в функцию JavaScript? - PullRequest
0 голосов
/ 20 июня 2009

Я создал класс связанного списка в своем коде JavaScript, а затем перевел этот код на C #.

Прямо сейчас у меня есть функция JavaScript, которая вызывает веб-службу для получения массива имен, а функция JavaScript onComplete берет этот массив и превращает его в связанный список.

Можно ли каким-либо образом создать связанный список в веб-службе и передать его обратно для использования в коде JavaScript, или связанные списки могут передаваться неправильно?

Редактировать: Позвольте мне перефразировать мой вопрос к чему-то, что имеет немного больше смысла. Если у вас есть пользовательский объект, созданный классом скажем .... класс User, и у этого класса есть переменная с именем user. Если вы передадите объект User: objUser обратно из C # в JavaScript, откуда JavaScript узнает, что он может получить доступ к objUser.userName? Как насчет возможных методов, которые он может вызывать для этого пользовательского объекта?

1 Ответ

1 голос
/ 20 июня 2009

У меня был похожий вопрос, когда я создавал свое приложение 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;

По сути, вам нужно будет скопировать все состояние из десериализованного объекта в переменную связанного списка.

...