2012-02-13 14 views
1

例モデル:辞書をシリアライズする方法<string、string>と値を引用符で囲まないでください。

public class Thing 
{ 
[JsonProperty("foo")]  
public string Foo {get;set;} 
[JsonProperty("bars")] 
public Dictionary<string,string> Bars {get;set;} 
} 

私は、出力は次のようになりたい:

{"foo":"Foo Value", "bars":{"key1":key1Value,"key2":key2Value}} 

私は辞書の値は引用符なしになりたい理由は、私はから価値を引き出すことができるですjquery経由のクライアント:

{"foo":"Foo Value", "bars":{"key1":$('#key1').val(),"key2":$('#key2').val()}} 

これはJson.Netを使用して可能ですか?

+0

ここで質問が分かりませんが、JSONは引用符なしで逆シリアル化できないか、実際には "$( '#key1')。val()"としてシリアル化しますか? –

+0

@PaulTyng、上記と同様に、$( '#key1')が必要です。val()は、ブラウザによって解釈されるときに引用符で囲まれません。私はJQueryセレクターがページ上の要素から値を引き出すことを期待しています。引用符で囲まれていれば、それは文字列として解釈され、JQueryセレクタは決して実行されません。私がそのセクションでJavaScript関数を呼び出しても同様の機能になります。 – DDiVita

+0

[これは私が探しています何に似ています。] [1] [1]:http://stackoverflow.com/questions/4547550/c-sharp-json-custom-serialization – DDiVita

答えて

1

これは私が思い付いた私の実装です:

public class DictionaryConverter : JsonConverter 
    { 
     public override bool CanConvert(Type objectType) 
     { 
      return objectType == typeof(Dictionary<string, string>); 
     } 

     public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
     { 
      throw new NotImplementedException(); 
     } 

     public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
     { 
      var items = (Dictionary<string, string>)value; 
      writer.WriteStartObject(); 
      foreach (var item in items) 
      { 

       writer.WritePropertyName(item.Key); 
       writer.WriteRawValue(item.Value); 

      } 
      writer.WriteEndObject(); 
      writer.Flush(); 

     } 
    } 

This postはあまりにも助けました。

関連する問題