是否可以使用包含破折号的属性名

本文关键字:属性 破折号 包含 可以使 是否 | 更新日期: 2023-09-27 17:52:35

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

我正在创建一个匿名对象,以便我可以使用Json将其序列化为Json。Net和我需要的属性之一包含一个'-'破折号字符。

我想要的一个例子是:

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

我知道我可以在创建对象时用下划线替换破折号,然后在序列化字符串中替换它们,但是想知道语言中是否有一种方法可以在没有这种解决方案的情况下做到这一点。

是否可以使用包含破折号的属性名

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

var document = new {
    conditions = new Dictionary<string, string>() {
        { "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.