2011-11-15 5 views
2

Dictionary<DateTime, double>から継承したオブジェクトのシリアライズには、結果のjson文字列にフィールドとプロパティーは含まれません。json.netによる派生オブジェクトのシリアライズ

注:これは簡単な例です。はい、私は辞書型から派生すべきではないことを知っています。型のオブジェクトをシリアル化

public class Timeserie : Dictionary<DateTime, double> 
{ 
    public string id; 

    public Timeserie() 
    { 

    } 

    public Timeserie(string id) 
    { 
     this.id = id; 
    } 
} 

使用:

var json_settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; 
var s = JsonConvert.SerializeObject(timeserie, Formatting.Indented, json_settings); 

は、基本クラスのデータが含まれ:

{ 
    "01/02/2009 00:00:00": 10.23, 
    "01/05/2009 00:00:00": 11.33 
} 

フィールドidが含まれていません。

json.netを使用して、派生クラスで宣言されたフィールドとプロパティがシリアル化に含まれるようにするにはどうすればよいですか?

答えて

0

json.netのコードを見てみると、辞書を扱うための特別な契約があるようです。

ので、新しい契約を作る、または辞書をカプセル化のいずれか(すなわち、辞書あなたのクラスのプロパティを作る)

あなたがお互いをオフに継承無地のクラスを作る場合、このコードは、すべてのプロパティをシリアル化します派生クラス

+0

派生クラスで宣言されたパブリックフィールドとプロパティの両方が無視されます。 – ihatems

+0

もしあなたが辞書の継承を取るなら、それはIDをシリアル化しますか? –

+0

私は基本的にはあなたがやっていることを基本的にやっているだけで、サブクラスはうまく処理されます。 –

関連する問題