Можете ли вы иметь имя свойства, содержащее тире
Возможно ли создать объект с именем свойства, содержащим символ тире?
Я создаю анонимный объект, чтобы я мог сериализовать его в Json, используя Json.Net, и одно из свойств, которые мне нужны, содержит символ "-".
Пример того, что я хочу:
var document = {
condtions = new {
acl = "public-read",
bucket = "s3-bucketname",
starts-with = "test/path"
}
};
Я знаю, что я мог бы заменить черту символами подчеркивания при создании объекта, а затем заменить их в сериализованной строке потом, но хотел знать, есть ли способ на этом языке, чтобы сделать это без этого обхода.
Ответы
Ответ 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.