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

StackOverflow https://stackoverflow.com/questions/1021967

Вопрос

Я создал класс связанного списка в своем коде 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;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top