2011-09-26 14 views
28

Staram się, aby Json.Net serializuje nazwę właściwości bez cudzysłowów i trudno jest zlokalizować dokumentację w Google. Jak mogę to zrobić?Json.Net - Nazwa właściwości szeregowej bez cytatów

Jest to bardzo mała część dużego renderowania Json, więc wolałbym dodać atrybut właściwości lub nadpisać metodę szeregowania w klasie.

Obecnie czyni to tak:

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

I mam nadzieję dostać go do renderowania jak: (href i type są bez cudzysłowów)

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

Od klasy:

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

To nie jest prawidłowy JSON. Dlaczego chcesz to zrobić? –

+4

Zobacz [w JSON, dlaczego każde imię jest cytowane?] (Http://stackoverflow.com/questions/2067974/in-json-why-is-each-name-quoted) –

+1

Marcello - Ma na celu zaspokojenie potrzeb Zewnętrzna wtyczka jQuery, która jest zasilana tymi danymi. – Overflew

Odpowiedz

34

Jest to możliwe, ale Odradzam tego,, ponieważ spowodowałoby to nieprawidłowy JSON, jak to zauważyli Marcelo i Marc w swoich komentarzach.

Korzystanie z biblioteki Json.NET Można to osiągnąć w następujący sposób:

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

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

Podczas szeregowania obiektu użyć typu JsonSerializer zamiast statycznego JsonConvert typu.

Na przykład:

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(); 

To będzie produkować:

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

Jeśli ustawisz QuoteName property instancji JsonTextWriter false nie będzie cytował nazwy obiektów.

Powiązane problemy