你可以有一个属性名称包含破折号

问题描述:

是否有可能创建一个属性名称包含破折号字符的对象?你可以有一个属性名称包含破折号

我正在创建一个匿名对象,以便我可以使用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")]指定名称。但是你不能在匿名类型上使用属性,所以你可能需要用你想要的属性(和属性)来定义一个类。

+0

我喜欢这种方法来处理非c#兼容名称 – Turowicz 2015-05-28 16:39:26

+1

这不适用于匿名对象。 – Thomas 2015-07-03 08:40:53

不幸的是,这是不可能的,因为语言不能够区分以下两种表现形式:

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