2011-09-26 39 views
28

我試圖讓Json.Net序列化沒有引號的屬性名稱,並且很難在Google上找到文檔。我怎樣才能做到這一點?Json.Net - 序列化不帶引號的屬性名稱

這是在一個很大的Json渲染的一小部分,所以我寧願要麼添加一個屬性屬性,要麼覆蓋類的序列化方法。

目前,它呈現這樣的:

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

,我希望得到它的呈現,如:(hreftype是不帶引號)

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

從類:

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

這不是有效的JSON。你爲什麼想這樣做? –

+4

請參閱[在JSON中,爲什麼要引用每個名稱?](http://stackoverflow.com/questions/2067974/in-json-why-is-each-name-quoted) –

+1

Marcello - 它是爲了滿足需求第三方jQuery插件,它提供這些數據。 – Overflew

回答

34

這是可能的,但我反對,因爲它會產生無效的JSON,正如Marcelo和Marc在他們的評論中指出的那樣。

使用Json.NET庫,你可以做到這一點,如下所示:

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

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

當序列化對象使用JsonSerializer類型,而不是靜態JsonConvert類型。

例如:

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

這將產生:

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

如果設置了JsonTextWriter實例的QuoteName property假的對象名稱將不再被引用。

相關問題