2011-04-24 25 views
19

¿Es posible crear un objeto con un nombre de propiedad que contenga un carácter de guión?¿Puede tener un nombre de propiedad que contenga un guión

Estoy creando un objeto anónimo para que pueda serializarlo a Json utilizando Json.Net y una de las propiedades que necesito contiene un carácter '-' de guión.

Un ejemplo de lo que quiero es:

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

Sé que podría reemplazar el tablero con guiones al crear el objeto y luego volver a colocarlas en la cadena serializada después, pero quería saber si hay una camino en el lenguaje para hacer esto sin esta solución.

Respuesta

25

No puede hacer esto con objetos anónimos; los nombres de campo deben ser identificadores válidos. En su lugar podría usar un diccionario, que Json.Net debe serializar la misma facilidad que un objeto anónimo:

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

No en C#, no. Sin embargo, la mayoría de los serializadores le permiten personalizar esto, a menudo a través de atributos. IIRC con JSON.NET, quiere [JsonProperty("starts-with")] para especificar el nombre. Sin embargo, no puede usar atributos en tipos anónimos, por lo que puede necesitar definir una clase con las propiedades (y atributos) que desee.

+0

Me encanta este enfoque para nombres que no cumplen con C# – Turowicz

+1

Esto no funciona con objetos anónimos. – Thomas

8

Por desgracia, eso no es posible, porque el lenguaje no sería capaz de diferenciar los dos siguientes expresiones:

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