2011-09-26 9 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

については、MarceloとMarcがコメントで指摘したように無効なJSONが生成されるため、この点について助言します。

次のようにあなたがこれを達成することができます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"} 

をfalseにJsonTextWriterインスタンスのQuoteName propertyを設定した場合、オブジェクト名は、もはや引用されます。

関連する問題