リンクリストをC#WebサービスからJavaScript関数に渡すことはできますか?
-
06-07-2019 - |
質問
JavaScriptコードでリンクリストクラスを作成し、そのコードをC#に翻訳しました。
今、名前の配列を取得するためにWebサービスを呼び出すJavaScript関数があり、JavaScript onComplete
関数がその配列を取得してリンクリストにします。
Webサービスでリンクリストを作成し、それをJavaScriptコードで使用するために渡す方法はありますか、またはリンクリストを正しく転送できませんか?
編集:質問をもう少し意味のあるものに言い換えてみましょう。クラスsay ....クラス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);
これで、タイプLinkedListのmyLinkedList変数が得られました。 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&quot; class&quot;に入れることを示す方法はありません。前に定義したこと。 JavaScriptは、LinkedListが「クラス」であることを理解しません。プロトタイプの使用に機能を追加したこと。
返されるのはJavaScriptオブジェクトです。
これを回避する1つの方法は、次のようなことです:
var linkedList = new LinkedList();
var deserializedObject = JSON.parse(jsonString);
linkedList.Items = deserializedObject.Items;
基本的に、すべての状態をデシリアライズされたオブジェクトからlinkedList変数にコピーする必要があります。