匿名类型中的特殊字符

时间:2012-04-30 16:26:10

标签: c# asp.net asp.net-mvc-3

我想创建一个匿名类型,其中包含变量名称中的特殊字符

例如我有这个:

new { status = "Active" }

我想要像

这样的东西
new { status = "Active", $exists = true }

这最终序列化为JSON,所以我知道我可以使用JObject或类似的东西,但作为匿名类型会更容易。

3 个答案:

答案 0 :(得分:2)

你必须遵守规则!您的代码将无法编译,因为您在代码中将其写为匿名类型(而非字符串),因此密钥必须是该语言中的标识符。

语言有规则。标识符必须以有效的identifier-start-character开头,定义为:

  

类Lu,Ll,Lt,Lm,Lo或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(凌乱)

答案 1 :(得分:0)

我认为你会很难过。特殊字符只是 - 特别的。它们对编译器具有重要意义,打败它并不容易(如果不是不可能)。

此外,如果您设法创建名为$exists的变量,您将创建一些令人困惑的代码。 $符号在C#和jQuery中有意义,因此任何读取代码的人都可能想知道发生了什么。

在我看来,它可能比它的价值更麻烦。

答案 2 :(得分:0)

你的$ exists将无法工作,因为它最终会被编译器转换为具有相同名称的属性。在属性值上,不允许使用此命名约定!