2011-09-26 15 views
28

Estoy tratando de hacer que Json.Net serialice un nombre de propiedad sin comillas, y le resulta difícil encontrar documentación en Google. ¿Cómo puedo hacer esto?Json.Net - Nombre de la propiedad en serie sin comillas

Es una parte muy pequeña de un gran renderizado Json, por lo que preferiría agregar un atributo de propiedad o anular el método de serialización en la clase.

la actualidad, el que hace de esta manera:

"event_modal": 
{ 
    "href":"file.html", 
    "type":"full" 
} 

y espero conseguirlo para rendir como: (href y type son sin comillas)

"event_modal": 
{ 
    href:"file.html", 
    type:"full" 
} 

De la clase:

public class ModalOptions 
{ 
    public object href { get; set; } 
    public object type { get; set; } 
} 
+4

Eso no es válido JSON. ¿Por qué quieres hacer esto? –

+4

Ver [en JSON, ¿por qué se cita cada nombre?] (Http://stackoverflow.com/questions/2067974/in-json-why-is-each-name-quoted) –

+1

Marcello - Es para satisfacer las necesidades de un Plugin jQuery de terceros, que alimenta estos datos. – Overflew

Respuesta

34

Es posible, pero Aconsejo en contra ya que produciría JSON no válido como Marcelo y Marc han señalado en sus comentarios.

El uso de la biblioteca Json.NET se puede lograr esto de la siguiente manera:

[JsonObject(MemberSerialization.OptIn)] 
public class ModalOptions 
{ 
    [JsonProperty] 
    public object href { get; set; } 

    [JsonProperty] 
    public object type { get; set; } 
} 

Cuando seria el objeto utilizar el tipo de JsonSerializer en lugar de la estática JsonConvert tipo.

Por ejemplo:

var options = new ModalOptions { href = "file.html", type = "full" }; 
var serializer = new JsonSerializer(); 
var stringWriter = new StringWriter(); 
using (var writer = new JsonTextWriter(stringWriter)) 
{ 
    writer.QuoteName = false; 
    serializer.Serialize(writer, options);    
} 
var json = stringWriter.ToString(); 

Esto producirá:

{href:"file.html",type:"full"} 

Si se establece el QuoteName property de la instancia JsonTextWriter en false ya no se citan los nombres de objeto.

Cuestiones relacionadas