【发布时间】:2018-11-27 19:17:05
【问题描述】:
我试图弄清楚当每个列表元素都可以具有不同的属性时如何反序列化对象。
例如,假设我必须选择“a”和“b”:
{
"Email": "james@example.com",
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [{
"name": "test",
"type": "a",
"town": "xyz"
},
{
"name": "test1",
"type": "b"
}]
}
当有 type == b 时,“town”可以为空或不可见,但当 type == a 时,town 应该是可见的。
我厌倦了使用序列化删除可空字段,但是当我尝试反序列化我的类结构时,只需将“城镇”添加到每个具有空值的元素,这是预期的,因为类结构看起来像那样。类结构应该是怎样的?
【问题讨论】:
-
你的班级结构现在是什么样子的?您希望它的理想外观如何?
-
几乎与下面评论中设置的@Connell.O'Donnell 相同。几分钟前,我发表了我真正想要的评论。第一个示例(@Connell.O'Donnell 答案)具有属性 -> 对于您按预期获得的第一个元素,对于第二个元素,我得到 name = test1,type=b,town=null。我试图摆脱元素列表中的这些“town=null”,所以我只有 => name = test1, type=b
-
您是说对于类型 A,您想使用具有
Town属性的类,但对于类型 B,您想使用不具有Town属性的类?如果是这样,您可以使用自定义 JsonConverter 进行反序列化——请参阅 Deserializing polymorphic json classes without type information using json.net
标签: c# serialization json.net deserialization