辞書の辞書をJavaScriptに渡す(.NET)
-
03-07-2019 - |
質問
SOAP Webサービスを介して2次元テーブルをJavaScript AJAXアプリケーションに渡す問題を解決しようとしています。次の属性で宣言されたASP.NET Webサービスを介してJavaScript Webページにデータを渡そうとしています:
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
JavaScriptに渡す複雑な型が必要です:
[Serializable]
public class PayRateSummary
{
public string[] EmployeeId;
public Dictionary<string, string> EmployeeName;
public string[] PaycodeId;
public Dictionary<string, Dictionary<string, double?>> EmployeePaycodeRate;
}
[WebMethod(EnableSession = true)]
public DataElements.PayRateSummary EnumPayRates(Guid companyId)
{
}
そして、かなり標準的な方法で宣言されたWebサービス:
<asp:ScriptManager runat="server" ID="ScriptManager1">
<Services><asp:ServiceReference Path="~/WebService.asmx" /></Services>
</asp:ScriptManager>
... 関数RefreshPayRates(){ WebService.EnumPayRates(CompanyCurrent、OnPayRatesLoaded、OnFailure); }
何らかの理由で、Dictionary [string、string]は大丈夫ですが、Dictionary [string、Dictionary [string、string]]は渡されません:
-&gt; http://vvcap.net/db/8rveoL-FMP6EUikCaqiz.htp
過去に頭を壁にぶつけて、そのようなオブジェクトを渡すために何ができ、解決策が見つからなかったことを理解したことを覚えています。
解決
sktrdie の構築回答、ASP.NET AJAX JSON Webサービスを使用して、データをJSONオブジェクトとして受け渡しできます。以下に例を示します。
この質問にはJSONに関する多くの良い情報があります- JSONとは何ですか。なぜ使用するのですか?
編集-
現時点では、 SOAP を使用していると言います。これはXML-ベースのトランスポートプロトコル。ここには非常に簡潔な記事があります-既存のASP.NET Webサービスを拡張してJSONをサポートする-既存のWebサービスを拡張する方法を説明します
また、.NET 3.5 JSONシリアライザー/デシリアライザーにアクセスできない場合は、ジェームズニュートンキングのJSON.NETライブラリ。
編集2-
もう一度スクリーンショットと[ScriptService]属性を持っているという事実を見ると、JSON文字列を返しているように見えます(これはデフォルトです)。したがって、私はASP.NET AJAX JSONシリアライザーがこの行のnullable doubleのシリアル化に失敗していると考えています
public Dictionary<string, Dictionary<string, double?>> EmployeePaycodeRate;
各インスタンスの正しいJSONデータ型へ? doubleを返すようにWebサービスを変更し、値を持つデータでそれを試してみると、これが事実かどうかを確認できます。
MSDN -
によるヌル可能タイプもサポートされており、ヌル不可タイプと同じ方法でJSONにマップされます。
それでも、これはあなたの問題が発生している場所なので、私が提案したのと同様の方法で見る価値があると思います
これが役立つことを願って
編集3-
ディクショナリ値を持つディクショナリがJSON文字列で表現できない理由は奇妙に思えます。辞書がJSONでこのように見えることを考慮してください
[{"Key":"a1","Value":"a1"},
{"Key":"a2","Value":"a2"}]
したがって、Dictionary値を持つ辞書は次のようになります(信じている)
[{"Key":"a1","Value": {"Key":"b1","Value":"b1"} },
{"Key":"a2","Value": {"Key":"b2","Value":"b2"} }]
JSONLint-JSONバリデーターによれば有効なJSONです。
他のヒント
これを使用してみましたか: http://code.google.com/p/aspjson/
ASPに慣れていませんが、PHPではPHPネイティブオブジェクトをJSONオブジェクトに変換するために似たようなものを使用しています。