C# 匿名类型中的特殊字符
我想创建一个匿名类型,在变量名中使用一个特殊字符 例如,我有:C# 匿名类型中的特殊字符,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,我想创建一个匿名类型,在变量名中使用一个特殊字符 例如,我有: new { status = "Active" } 我想要类似的东西 new { status = "Active", $exists = true } 这最终会序列化为JSON,所以我知道我可以使用JObject或类似的东西,但作为匿名类型要容易得多。我想你会很难做到这一点。特别的角色就是这样——特别。它们对编译器具有重要意义,要克服这一点并不容易(如果不是不可能的话) 此外,如果您确实创建了一个名为$exists的变量,那么
new { status = "Active" }
我想要类似的东西
new { status = "Active", $exists = true }
这最终会序列化为JSON,所以我知道我可以使用JObject或类似的东西,但作为匿名类型要容易得多。我想你会很难做到这一点。特别的角色就是这样——特别。它们对编译器具有重要意义,要克服这一点并不容易(如果不是不可能的话) 此外,如果您确实创建了一个名为
$exists
的变量,那么您将创建一些令人困惑的代码。$
符号在C#和jQuery中有意义,因此任何阅读您的代码的人都可能想知道到底发生了什么
在我看来,这可能比它的价值更麻烦 你必须遵守规则!您的代码将无法编译,因为您是以匿名类型(而不是字符串)在代码中编写的,因此键必须是语言中的标识符 语言有规则。标识符必须以有效的
标识符开始字符开始,定义如下:
Lu、Ll、Lt、Lm、Lo或Nl类的Unicode字符
根据这条规则:
使用此表,第三列告诉我们“$”在“Sc”类中,因此不能使用它
如果我是你,我会做三件事之一:
修复API规范,使其不依赖于在您使用的语言中不是有效标识符的键(痛苦)
编写一个简单的转换层,在JSON被发送之前重新编写它(凌乱)
$exists将无法工作,因为编译器最终会将其转换为同名的属性。在属性值上不允许使用此命名约定 您是正确的,但是这只是针对JSON的序列化。谢谢您的详细回答。我显然知道编译器的局限性,我希望有一个解决办法。因为它稍后只是JSON序列化的,所以我将创建一个JObject对象。祝你好运!哈哈,我想知道第三点是什么。我会把它放在那里,让答案更神秘。