[DataContract]
public class A : List<B>
{
[DataMember]
public double TestA { get; set; }
}
[DataContract]
public class B
{
[DataMember]
public double TestB { get; set; }
}
使用上面的模型,我尝试序列化以下对象:
List<A> list = new List<A>()
{
new A() { TestA = 1 },
new A() { TestA = 3 }
};
json = JsonConvert.SerializeObject(list);
//json: [[],[]]
TestA
中我的两个值在哪里?
它可能与this thread(XML)重复,但我想知道是否没有选项通过设置一些JSON序列化选项来包含这些值?
注意:在类List<B>
中创建属性A
而不是继承是我的选择。
答案 0 :(得分:1)
根据上述评论(谢谢!),有两种方法可以获得正确的结果:
无论如何,从List<T>
继承很少是一个很好的解决方案(see here)
我已经尝试过使用workarround:
[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; }
}
这适用于序列化和反序列化。重要提示:Items
必须是Array
B
而不是List<B>
。否则反序列化不适用于Items
。