實現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 2017-03-09 23:09:45