C# 如何使用不同类型的列表反序列化JSON?
我使用的是第三方API,它的一个方法返回json和不同类型的对象列表。像这样: 编辑:以下是JSON:C# 如何使用不同类型的列表反序列化JSON?,c#,.net,json,serialization,.net-core,C#,.net,Json,Serialization,.net Core,我使用的是第三方API,它的一个方法返回json和不同类型的对象列表。像这样: 编辑:以下是JSON: "plays": [ { "description": "Jump Ball Jordan vs. Nurkic: Tip to", "jumpBall": { "awayPlayer": { "id": 9192, "firstName": "Jusuf", "lastName"
"plays": [
{
"description": "Jump Ball Jordan vs. Nurkic: Tip to",
"jumpBall": {
"awayPlayer": {
"id": 9192,
"firstName": "Jusuf",
"lastName": "Nurkic",
"position": "C",
"jerseyNumber": 27
},
"homePlayer": {
"id": 9268,
"firstName": "DeAndre",
"lastName": "Jordan",
"position": "C",
"jerseyNumber": 6
},
"wonBy": "HOME",
"tippedToPlayer": null
},
"playStatus": {
"quarter": 1,
"secondsElapsed": 0,
"awayPlayersOnCourt": [
{
"player": {
"id": 9192,
"firstName": "Jusuf",
"lastName": "Nurkic",
"position": "C",
"jerseyNumber": 27
},
"location": null
}
],
"homePlayersOnCourt": [
{
"player": {
"id": 9268,
"firstName": "DeAndre",
"lastName": "Jordan",
"position": "C",
"jerseyNumber": 6
},
"location": null
}
]
}
},
{
"description": "MISS Rivers 8' Floating Jump Shot",
"fieldGoalAttempt": {
"team": {
"id": 102,
"abbreviation": "LAC"
},
"shootingPlayer": {
"id": 9270,
"firstName": "Austin",
"lastName": "Rivers",
"position": "PG",
"jerseyNumber": 25
},
"assistingPlayer": null,
"blockingPlayer": null,
"shotType": "Floating Jump Shot",
"distanceFeet": 0,
"points": 2,
"location": {
"x": 126,
"y": 245
},
"result": "MISSED"
},
"playStatus": {
"quarter": 1,
"secondsElapsed": 16,
"awayPlayersOnCourt": [],
"homePlayersOnCourt": [
{
"player": {
"id": 9270,
"firstName": "Austin",
"lastName": "Rivers",
"position": "PG",
"jerseyNumber": 25
},
"location": null
}
]
}
},
{
"description": "Thornwell REBOUND (Off:1 Def:0)",
"rebound": {
"team": {
"id": 102,
"abbreviation": "LAC"
},
"retrievingPlayer": {
"id": 13857,
"firstName": "Sindarius",
"lastName": "Thornwell",
"position": "PG",
"jerseyNumber": null
},
"type": "OFFENSIVE"
},
"playStatus": {
"quarter": 1,
"secondsElapsed": 19,
"awayPlayersOnCourt": [],
"homePlayersOnCourt": [
{
"player": {
"id": 13857,
"firstName": "Sindarius",
"lastName": "Thornwell",
"position": "PG",
"jerseyNumber": null
},
"location": null
}
]
}
}
],
如您所见,每种类型都有说明
和播放状态
,但也有特定类型,如跳球
或反弹
。如何将此类列表反序列化为C#对象?显然,jumpBall
与fieldgoalattent
没有太多共同之处
我的解决方案:
我唯一想到的是创建一个Play
对象,如下所示:
public class Play
{
public string Name { get; set; } // JumpBall, Rebound, etc...
public object PlayObject { get; set; } // The actual play object
}
然后。。如果我想在代码中使用Play
,我会根据名称将PlayObject
转换为类型
问题:
这是一个好策略吗?如果是这样的话,我如何将这样的json反序列化到C#中的Play
列表中
如果这不是一个好主意,我应该如何处理这种情况?请将json添加为文本而不是图像。您可以创建自定义转换器(基本上,它只覆盖ReadJson以根据播放状态创建确切的类型),然后使用该转换器进行反序列化。请您将问题作为文本而不是屏幕截图包含JSON?此处要求不要将图像用于文本数据,请参见和了解原因。如果您正在使用,并且每个对象中都有一些属性,您可以检查以确定其具体类型,请参见或。