IEnumerableを実装する一部のカスタムタイプには、バッキングコレクションが必ずしもありません。例えば、 'yield'やLINQを使って動的に生成することができます。次に例を示します。Json.NetでIEnumerable型のデフォルトJavaScript配列のシリアル化をスキップするにはどうすればよいですか?
public class SOJsonExample
{
public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
{
public List<int> Keys { get; set; }
public List<float> Values { get; set; }
public MyCustomEnumerable()
{
Keys = new List<int> { 1, 2, 3 };
Values = new List<float> { 0.1f, 0.2f, 0.3f };
}
public IEnumerator<KeyValuePair<int, float>> GetEnumerator()
{
var kvps =
from key in Keys
from value in Values
select new KeyValuePair<int, float>(key, value);
return kvps.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
Json.NETにより、デフォルトの直列化は、それぞれの値を列挙し、(私はしたくない)JavaScriptの配列に値を格納することであることを私が発見しました。デフォルトのデシリアライザでは、コレクションを移入できないため、コレクションのデシリアライズに失敗します。このような場合、Json.NETにデフォルトのJavaScript配列のシリアル化をスキップして、クラスのメンバーだけを保存してもらいたいと思います。
私が欲しいのは私のキーと値です - これを行うためのショートカット方法はありますか、独自のカスタムシリアライザを実装する必要はありますか?
チェックしたthisとthisのどちらも正確には私の質問ではありません。スキャンしたthe documentationでも、私が探していたものが見つかりませんでした(おそらく私は間違った場所を探しました)。
(編集#1 - 見やすく)
(#2編集 - 自分の質問に答え...下記参照)私自身の質問に答えた
このページでは、 'JsonObject'と他の属性の説明があります。 http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm – kmc059000