C# 如何跳过Json.Net中IEnumerable类型的默认JavaScript数组序列化?

C# 如何跳过Json.Net中IEnumerable类型的默认JavaScript数组序列化?,c#,json,serialization,json.net,ienumerable,C#,Json,Serialization,Json.net,Ienumerable,一些实现IEnumerable的自定义类型不一定有支持集合。它们可以动态生成,例如使用“yield”或LINQ。以下是一个例子: public class SOJsonExample { public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>> { public List<int> Keys { get; set; } publi

一些实现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();
        }
    }
}
public类SOJsonExample
{
公共类MyCustomEnumerable:IEnumerable
{
公共列表键{get;set;}
公共列表值{get;set;}
公共MyCustomEnumerable()
{
Keys=新列表{1,2,3};
值=新列表{0.1f、0.2f、0.3f};
}
公共IEnumerator GetEnumerator()
{
var kvps=
从钥匙插入钥匙
从价值到价值
选择新的KeyValuePair(键,值);
返回kvps.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回此.GetEnumerator();
}
}
}
我发现Json.NET的默认序列化是枚举每个值并将这些值存储在JavaScript数组中(我不希望这样)。默认反序列化程序将无法反序列化集合,因为它无法填充。在这些情况下,我希望Json.NET跳过默认的JavaScript数组序列化,只存储类的成员

我想要的只是我的键和值——有没有快捷方式可以做到这一点,或者我必须实现自己的自定义序列化程序

检查和,这两个都不是我的问题。也进行了扫描,但没有找到我要找的东西(也许我找错地方了)

(编辑#1-提高清晰度)


(编辑#2-回答了我自己的问题…见下文)

回答了我自己的问题-见精彩:

.NET列表(从IEnumerable继承的类型)和.NET数组转换为JSON数组。因为JSON数组只支持一系列值而不支持属性,所以在.NET集合上声明的任何其他属性和字段都不会序列化。在不需要JSON数组的情况下,可以将JsonObjectAttribute放置在实现IEnumerable的.NET类型上,以强制将该类型序列化为JSON对象

以我为例:

[JsonObject]
public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
{
    ...
}
[JsonObject]
公共类MyCustomEnumerable:IEnumerable
{
...
}

此页面包含
JsonObject
和其他属性的说明。