2009-01-04 98 views
1

我試圖解決通過SOAP Web服務將2維表傳遞到JavaScript AJAX應用程序的問題。我試圖通過ASP.NET Web服務將數據傳遞到JavaScript的網頁宣稱有以下屬性:傳遞給JavaScript字典(.NET)的字典

[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) 
{ 
} 

與網站

<asp:ScriptManager runat="server" ID="ScriptManager1"> 
     <Services><asp:ServiceReference Path="~/WebService.asmx" /></Services> 
    </asp:ScriptManager> 

... 功能RefreshPayRates(){ WebService.EnumPayRates(公司:服務於一個非常標準的方式聲明當前,OnPayRatesLoaded,OnFailure); }

出於某種原因,詞典[字符串,字符串]時獲得通過還好吧,但不是詞典[字符串,詞典[字符串,字符串]:

- >http://vvcap.net/db/8rveoL-FMP6EUikCaqiz.htp

我記得過去我的頭靠在牆上去了解,可以做些什麼來傳遞這樣的對象,並且從來沒有找到任何解決方案。

回答

2

建立在sktrdie的答案上,您可以使用ASP.NET AJAX JSON Web服務以JSON對象的形式傳遞和返回數據。下面是一些examples-

上有JSON很多好的信息,在這個問題上 - What is JSON and why would I use it?

編輯 -

目前,你說你正在使用SOAP,這是一個基於XML的傳輸協議。這裏有一個非常簡潔的文章 - Extending an existing ASP.NET Web Service to support JSON - 解釋瞭如何擴展現有的Web服務,

此外,如果您無權訪問.NET 3.5 JSON串行器/解串器,請看James Newton King's JSON.NET library

EDIT 2 -

再次在你的屏幕截圖看與你有[ScriptService]屬性的事實,你似乎是返回一個JSON字符串(我的理解是默認值)。所以,我在想的是ASP。NET AJAX的JSON序列未能序列化可空雙在此行

public Dictionary<string, Dictionary<string, double?>> EmployeePaycodeRate; 

在每一種情況下正確的JSON數據類型?您可以通過將Web服務更改爲返回double來查看是否出現這種情況,然後使用具有值的數據對其進行嘗試。

根據MSDN -

可空類型也支持並映射到JSON以同樣的方式作爲非可空類型。

儘管如此,我認爲這是值得看的類似的方式爲我所建議的,因爲這是你的問題發生

希望這有助於

編輯3 -

這似乎很奇怪,爲什麼帶有字典值的Dictionary不可能在JSON字符串中表示。想想看,一個字典是這樣的JSON

[{"Key":"a1","Value":"a1"}, 
{"Key":"a2","Value":"a2"}] 

詞典與字典價值,因此看起來像這樣(我相信)

[{"Key":"a1","Value": {"Key":"b1","Value":"b1"} }, 
{"Key":"a2","Value": {"Key":"b2","Value":"b2"} }] 

這是根據JSONLint - the JSON validator有效的JSON。

+0

Russ,是不是我正在使用的是... – galets 2009-01-05 01:41:32

2

您是否嘗試過使用這樣的:http://code.google.com/p/aspjson/

我不熟悉ASP,但是在PHP我使用類似PHP本地對象轉換成JSON對象的東西。

+0

++爲javascript提供它想要的方式,它本身就是這樣... – dkretz 2009-01-05 00:24:11