【发布时间】:2013-02-08 16:54:19
【问题描述】:
一些实现 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,这两个都不是我的问题。也扫描了the documentation,但没有找到我要找的东西(可能我找错地方了)。
(编辑 #1 - 提高清晰度)
(编辑#2 - 回答了我自己的问题...见下文)
【问题讨论】:
标签: c# json serialization json.net ienumerable