2009-06-20 5 views
0

J'ai créé une classe de liste chaînée dans mon code JavaScript, puis j'ai traduit ce code en C#.Puis-je transmettre une liste chaînée d'un service Web C# à une fonction JavaScript?

Maintenant j'ai une fonction JavaScript qui appelle un service Web afin d'obtenir un tableau de noms, la fonction JavaScript onComplete prend alors ce tableau et le transforme en liste chaînée.

Est-il possible de créer la liste liée dans le service Web et de la renvoyer pour être utilisée par le code JavaScript ou les listes liées ne peuvent-elles pas être transférées correctement? Permettez-moi de reformuler ma question à quelque chose qui a un peu plus de sens.

Éditer: Si vous avez un objet personnalisé créé par une classe dis .... class User, et que cette classe a une variable appelée nom d'utilisateur. Si vous passez un objet Utilisateur: objUser, retour de C# en JavaScript, comment le JavaScript sait-il qu'il peut accéder à objUser.userName? Qu'en est-il des méthodes possibles qu'il peut invoquer sur cet objet utilisateur?

+1

Il n'existe pas de liste chaînée. Il n'y a que votre code JavaScript qui crée quelque chose que vous appelez une "liste liée". Qu'est-ce qui vous fait penser que votre "liste liée" ne peut pas être transférée correctement? Avez-vous essayé et échoué? Qu'avez-vous essayé?Comment a-t-il échoué? À quoi ressemble votre «liste liée»? –

+0

@Matt: Google "JSON". BTW, avez-vous sérieusement utilisé JavaScript et les services Web pendant plus d'une semaine, et pas entendu parler de JSON? –

+0

@Matt: Les tableaux en JavaScript sont en fait "documentés". Ils sont même mentionnés dans certains "livres". Ils ne sont pas parmi les fonctionnalités les plus avancées, non plus. –

Répondre

1

J'avais une question similaire lorsque je créais mon application ASP.NET MVC. Fondamentalement, la réponse est que JavaScript n'a pas le même concept de types qu'en C#. Disons que vous avez décidé d'utiliser JSON pour transmettre des données entre votre client et votre serveur dans votre application. Le choix du format JSON, XML, YAML ou autre n'est pas important.

côté serveur

Sur votre côté serveur, dans votre code C#, vous pouvez faire quelque chose comme ceci (en supposant que vous utilisez une bibliothèque JSON de quelque sorte):

var myLinkedList = JsonConvert.DeserializeObject<LinkedList>(json); 

Maintenant, vous J'ai une variable myLinkedList de type LinkedList. myLinkedList se comporte maintenant comme toutes les instances de LinkedList.

côté client

Cependant sur le site du client, dans votre code JavaScript, vous probablement quelque chose comme ceci:

function LinkedList(){ 
    //Constructor for your LinkedList 
}; 

LinkedList.prototype = { 
    //Various functions to operate on your linked list 
}; 

Vous devez écrire quelque chose comme ça pour désérialiser les données qui retourne à partir du serveur:

var linkedList = JSON.parse(jsonString); 

Notez qu'il n'y a AUCUN moyen d'indiquer que vous voulez que ces données désérialisées nà la "classe" LinkedList que vous avez définie précédemment. JavaScript ne comprend pas que LinkedList est une "classe" à laquelle vous avez ajouté des fonctionnalités pour utiliser un prototype.

Ce que vous obtenez est un objet JavaScript.

Une façon de contourner cela est de faire quelque chose comme ceci:

var linkedList = new LinkedList(); 
var deserializedObject = JSON.parse(jsonString); 

linkedList.Items = deserializedObject.Items; 

Fondamentalement, vous auriez à copier tout l'état de votre objet désérialisé dans votre variable chaînée.

+1

JSON est synonyme de "Javascript Object Notation" et est un format de données pour l'échange d'objets entre JavaScript et votre code de retour et vice versa. Utilisez une bibliothèque comme JSON.NET dans votre code C# et une bibliothèque d'analyse comme celle trouvée sur www.json.org pour travailler avec JSON dans votre code. –

Questions connexes