2013-03-12 45 views
2

我有,我通過jQuery.ajax()提交給C#Web服務性能衆多JSON對象 - 它看起來是這樣的:映射JSON(jQuery的),以KeyValuePair

var obj = {}; 
obj.LanguageCode = 1031; 
obj.Gender = { 'Geschlecht': 'Mann' }; 
obj.City = { 'Stadt': 'Berlin' }; 
... 

一些特性,如性別和城市,存儲我想映射到KeyValuePair的本地化/翻譯的提示和響應。我試過以不同的方式來格式化Javascript,但數據只在數據類型爲Dictionary時纔會出現 - 當數據類型爲KeyValuePair時,它不起作用。例如:

private Dictionary Gender { get; set; } // works: Gender[0] == {[Geschlecht,Mann]} 
private KeyValuePair City { get; set; } // doesn't work: City == {[,]} 

我可以在必要時使用字典,因爲它的工作原理,但它似乎是KeyValuePair是更合適和更清潔的使用。你能映射JavaScript對象到KeyValuePairs,還是我堅持使用Dictionary?

+0

如果你想映射到'KeyValuePair'沒有進一步的翻譯你的實際需要以匹配C#結構的屬性名稱 - 「{」Key「:」Geschlecht「,」Value「:」Mann「}' – 2013-03-12 20:00:59

+0

謝謝,傑米 - 這是我嘗試過的組合。只是再試一次,VS調試器顯示Key和Value爲空。 – emo 2013-03-12 22:20:00

回答

1

看起來像你需要一個KeyValuePair對象的集合,而不是一個(即使你的集合只有一個項目) - 這是一個詞典,是一個有幾個幫助者的集合。但個人而言,我建議建立一個實際的班級來代表你的價值觀,把它組織得更好一點 - 稍微詳細些,但我認爲這是值得的。

// C# 
public class LocalAndTranslated { 
    public string Localized { get;set; } 
    public string Translated { get;set; } 
} 

// JS 
obj.Gender = { Localized: "Geschlecht", Translated: "Man" }; 

如果你願意,你甚至可以走這麼遠來定義JavaScript中的「類」:

var LocalAndTranslated = (function() { 
    function LocalAndTranslated(localized, translated) { 
     this.Localized = localized; 
     this.Translated = translated; 
    } 
    return LocalAndTranslated; 
})(); 

obj.Gender = new LocalAndTranslated("Geschlecht", "Man"); 
+0

謝謝,喬 - 我曾嘗試過類似的東西,但無法讓它起作用。我正在採取一種捷徑,我認爲它與您所描述的JS類相同:obj.Gender = {Localized:「Geschlecht」,翻譯:「Man」}這不是一回事嗎? – emo 2013-03-12 19:58:05

+0

是的,你實際上並不需要在JavaScript中的「類」 - 定義像你得到的純JS對象是好的。所有都取決於你的編碼風格 - 我喜歡定義類,使它更安全一些,因爲你不必擔心拼寫錯誤 - 類定義定義了屬性,所以無論你在構造函數中傳遞什麼把它放在正確的地方。 – 2013-03-12 20:02:35

+0

我測試了您的示例,並在VS調試器中看到稍微不同的結果 - LocalAndTranslated實例對Localized和Translated屬性具有空值。它應該像你所描述的那樣工作,所以一定是錯過了一些顯而易見的東西 - 當我想到它的時候,我會一直喋喋不休地發佈解決方案。 – emo 2013-03-12 22:16:55