你有一个包含短划线的属性名称吗?

是否可以创建一个包含短划线字符的属性名称的对象?

我正在创建一个匿名对象,以便我可以使用Json.Net将其序列化为Json,并且我需要的其中一个属性包含一个’ – ‘破折号字符。

我想要的一个例子是:

var document = { condtions = new { acl = "public-read", bucket = "s3-bucketname", starts-with = "test/path" } }; 

我知道我可以在创建对象时用下划线替换短划线,然后在序列化字符串中替换它们,但是想知道在没有这种解决方法的情况下是否有语言方法可以执行此操作。

你不能用匿名对象做到这一点; 字段名称必须是有效的标识符。 你可以使用一个字典,Json.Net应该像匿名对象一样容易地序列化:

 var document = new { conditions = new Dictionary() { { "acl", "public-read" }, { "bucket", "s3-bucketname" }, { "starts-with", "test/path" } } }; 

不在c#中,没有。 但是,大多数序列化程序允许您自定义此选项 – 通常通过属性。 IIRC与JSON.NET你想要[JsonProperty("starts-with")]来指定名称。 但是,您无法在匿名类型上使用属性,因此您可能需要使用所需的属性(和属性)定义类。

不幸的是,这是不可能的,因为语言无法区分以下两个表达式:

 condition.starts-with; // Read "starts-with" property. condition.starts - with; // Read "starts" property and subtract "with" variable.