2012-04-30 53 views
2

我想在一個變量在匿名類型特殊字符

例如名稱創建一個匿名類型特殊字符我有這樣的:

new { status = "Active" } 

我想是這樣

new { status = "Active", $exists = true } 

這最終會序列化爲JSON,所以我知道我可以使用JObject或類似的東西,但作爲匿名類型會更容易。

回答

2

你必須堅持規則!你的代碼不會被編譯,因爲你將它寫成代碼中的匿名類型(而不是字符串),所以鍵必須是該語言中的標識符。

該語言有規則。一個標識符具有開始與一個有效identifier-start-character,定義:

類路中,L1,LT,LM,羅,或NL

Unicode字符作爲每個這樣的規則:

http://www.jaggersoft.com/csharp_grammar.html#identifier-start-character

使用這個表格,第三列告訴我們''''在'Sc'類中,所以你不能使用它。

http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

如果我是你,我會做的三兩件事之一:

  1. 解決您的API規範,所以它不依賴於不在你的語言有效標識符鍵之前被髮送(亂)使用(痛苦)
  2. 編寫一個簡單的翻譯層重新寫你的JSON
+0

感謝您的徹底解答。我明顯知道編譯器的限制,我希望有一個解決方法。因爲無論如何它只是JSON序列化,我只是將該對象創建爲JObject。 –

+0

祝你好運,你在做什麼! – Joe

+0

哈哈我不知道神祕點3是什麼。我會留在那裏,讓答案更加神祕。 – Joe

0

我想你會遇到困難的。特殊字符就是這樣 - 特別的。它們對編譯器有着重要的意義,要打敗它並不容易(如果不是不可能的話)。

此外,如果您確實設法創建名爲$exists的變量,您將創建一些令人困惑的代碼。 $符號在C#和jQuery中有意義,所以任何讀取你的代碼的人都會想知道發生了什麼。

在我看來,這可能比它的價值更麻煩。

+0

你是對的,但它只是用於序列化爲JSON。 –

0

您$存在將無法正常工作BEC最終它會被編譯器翻譯爲具有相同名稱的屬性。而在屬性值這個命名約定是不允許的!