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
而不是继承对我来说是没有选择的.
根据上面的评论(谢谢!)有两种方法可以获得正确的结果:
无论如何,继承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
必须是Array
ofB
和 no List<B>
。否则反序列化不适用于Items
.
归档时间: |
|
查看次数: |
580 次 |
最近记录: |