Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用不同类型的列表反序列化JSON?_C#_.net_Json_Serialization_.net Core - Fatal编程技术网

C# 如何使用不同类型的列表反序列化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"

我使用的是第三方API,它的一个方法返回json和不同类型的对象列表。像这样:

编辑:以下是JSON:

  "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?此处要求不要将图像用于文本数据,请参见和了解原因。如果您正在使用,并且每个对象中都有一些属性,您可以检查以确定其具体类型,请参见或。