IEnumerable を実装する一部のカスタム型は、必ずしもバッキング コレクションを持っていません。たとえば、「yield」や LINQ を使用して動的に生成できます。次に例を示します。
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を確認しましたが、どちらも私の質問ではありません。ドキュメントもスキャンしましたが、探しているものが見つかりませんでした (おそらく、間違った場所を探しました)。
(編集 #1 - 明快さの向上)
(編集#2 - 私自身の質問に答えました...以下を参照してください)