当对象从列表继承时序列化对象

gog*_*cam 5 c# inheritance serialization json

[DataContract]
public class A : List<B>
{
    [DataMember]
    public double TestA { get; set; }
}

[DataContract]
public class B
{
    [DataMember]
    public double TestB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的模型,我尝试序列化以下对象:

List<A> list = new List<A>()
{
    new A() { TestA = 1 },
    new A() { TestA = 3 }
};

json = JsonConvert.SerializeObject(list);
//json: [[],[]]
Run Code Online (Sandbox Code Playgroud)

我的两个价值来自TestA哪里?这可能是从这个线程(XML)重复,但我想知道是否没有选项通过设置一些JSON序列化选项来包含这些值?

注意:List<B>在类中创建属性A而不是继承对我来说是没有选择的.

gog*_*cam 2

根据上面的评论(谢谢!)有两种方法可以获得正确的结果:

无论如何,继承List<T>很少是一个好的解决方案(请参阅此处

我已经尝试过使用解决方法:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class A : List<B>
{
    [JsonProperty]
    public double TestA { get; set; }

    [JsonProperty]
    public B[] Items
    {
        get
        {
            return this.ToArray();
        }
        set
        {
            if (value != null)
                this.AddRange(value);
        }
    }
}

public class B
{
    public double TestB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这适用于序列化和反序列化。重要提示:Items必须是ArrayofB和 no List<B>。否则反序列化不适用于Items.