質問

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オブジェクトに変換するために似たようなものを使用しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top