实现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