你可以有一个属性名称包含破折号
问题描述:
是否有可能创建一个属性名称包含破折号字符的对象?你可以有一个属性名称包含破折号
我正在创建一个匿名对象,以便我可以使用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<string, string>() {
{ "acl", "public-read" },
{ "bucket", "s3-bucketname" },
{ "starts-with", "test/path" }
}
};
答
不在c#,no。然而,大多数序列化器允许您定制这个 - 通常通过属性。 IIRC与JSON.NET你想要[JsonProperty("starts-with")]
指定名称。但是你不能在匿名类型上使用属性,所以你可能需要用你想要的属性(和属性)来定义一个类。
答
不幸的是,这是不可能的,因为语言不能够区分以下两种表现形式:
condition.starts-with; // Read "starts-with" property.
condition.starts - with; // Read "starts" property and subtract "with" variable.
我喜欢这种方法来处理非c#兼容名称 – Turowicz 2015-05-28 16:39:26
这不适用于匿名对象。 – Thomas 2015-07-03 08:40:53