是否可以使用包含破折号字符的属性名称创建对象?
我正在创建一个匿名对象,这样我就可以使用Json.Net将它序列化为Json,并且我需要的一个属性包含一个'-‘破折号字符。
我想要的一个例子是:
var document = {
condtions = new {
acl = "public-read",
bucket = "s3-bucketname",
starts-with = "test/path"
}
};
我知道我可以在创建对象时用下划线替换破折号,然后在序列化的字符串中替换它们,但是我想知道在语言中是否有一种方法可以在没有这种解决方法的情况下做到这一点。
发布于 2011-04-25 00:03:53
您不能对匿名对象执行此操作;字段名必须是有效的标识符。相反,您可以使用字典,Json.Net应该像序列化匿名对象一样轻松地序列化字典:
var document = new {
conditions = new Dictionary<string, string>() {
{ "acl", "public-read" },
{ "bucket", "s3-bucketname" },
{ "starts-with", "test/path" }
}
};
发布于 2011-04-25 00:02:28
不是在c#,不是。但是,大多数序列化程序都允许您对此进行自定义--通常是通过属性。IIRC如果使用JSON.NET,您希望[JsonProperty("starts-with")]
指定名称。但是,您不能在匿名类型上使用属性,因此您可能需要定义一个具有所需属性(和属性)的类。
发布于 2011-04-25 00:03:58
不幸的是,这是不可能的,因为语言将无法区分以下两个表达式:
condition.starts-with; // Read "starts-with" property.
condition.starts - with; // Read "starts" property and subtract "with" variable.
https://stackoverflow.com/questions/5771577
复制相似问题