Подтвердить что ты не робот

Можете ли вы иметь имя свойства, содержащее тире

Возможно ли создать объект с именем свойства, содержащим символ тире?

Я создаю анонимный объект, чтобы я мог сериализовать его в Json, используя Json.Net, и одно из свойств, которые мне нужны, содержит символ "-".

Пример того, что я хочу:

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

Я знаю, что я мог бы заменить черту символами подчеркивания при создании объекта, а затем заменить их в сериализованной строке потом, но хотел знать, есть ли способ на этом языке, чтобы сделать это без этого обхода.

4b9b3361

Ответ 1

Вы не можете сделать это с анонимными объектами; имена полей должны быть действительными идентификаторами. Вместо этого вы можете использовать словарь, который Json.Net должен сериализовать так же легко, как анонимный объект:

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

Ответ 2

Не в С#, нет. Однако большинство сериализаторов позволяют настраивать это - часто с помощью атрибутов. IIRC с JSON.NET вы хотите [JsonProperty("starts-with")] указать имя. Однако вы не можете использовать атрибуты для анонимных типов, поэтому вам может понадобиться определить класс со свойствами (и атрибутами), которые вы хотите.

Ответ 3

К сожалению, это невозможно, потому что язык не сможет отличить два следующих выражения:

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