Как пропустить сериализацию массива JavaScript по умолчанию для типов IEnumerable в Json.Net?
Некоторые пользовательские типы, которые реализуют 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 по умолчанию и просто сохранил членов класса.
Все, что мне нужно, это мои ключи и значения - есть ли какой-нибудь быстрый способ сделать это, или мне нужно реализовать свой собственный сериализатор?
Провереноэто а такжеэто, ни один из которых не является моим вопросом. Отсканированныедокументация также, но не нашел то, что искал (возможно, я искал не в том месте).
(Правка № 1 - улучшенная ясность)
(Edit # 2 - ответил на мой собственный вопрос ... см. Ниже)