从JSON导航响应的自定义反序列化

1zmg4dgp  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个API,它返回一个类似下面的JSON,我必须在C#对象中反序列化它:

{
      "found": true,
      "resultsData": [
        {
          "2023-05-13": [
            {
              "info1": "Test",
              "infoCode": 1,
              "infos": [
                {
                  "code": 2,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 3,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 4,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 5,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                }
              ]
            }
          ]
        },
        {
          "2023-05-14":  [
            {
              "info1": "Test",
              "infoCode": 2,
              "infos": [
                {
                  "code": 6,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 7,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 8,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                },
                {
                  "code": 9,
                  "extraInfo1": "test1",
                  "extraInfo2": "test2",
                  "extraInfo3": "test3",
                  "order": 1,
                  "risk": "",
                  "alarm": "alarm text"
                }
              ]
            }
          ]
        }
      ],
      "message": ""
    }

如果“2023-05-13”像属性一样插入到对象中,那么可以很容易地将其反序列化为对象,但是因为这不能反序列化为POCO对象,并且不可能更改API响应,所以我试图找到一个解决方案。在this article from Microsoft之后,我了解到我可以使用System.Text.Json和JsonNode对象手动反序列化,并在循环中读取属性和值。我弄清楚了如何获得一个JSON节点和对象,但我被困在检索“2023-05-13”值和“2023-05-14”,因为它们没有像其他属性一样的“名称”。任何帮助一些代码,以找出将远远超过赞赏

vbkedwbf

vbkedwbf1#

可以使用字典获取日期时间数据

Data data = System.Text.Json.JsonSerializer.Deserialize<Data>(json);

public partial class Data
{
    [JsonPropertyName("found")]
    public bool Found { get; set; }

    [JsonPropertyName("resultsData")]
    public List<Dictionary<string, List<ResultsData>>> ResultsData { get; set; }

    [JsonPropertyName("message")]
    public string Message { get; set; }
}

public partial class ResultsData
{
    [JsonPropertyName("info1")]
    public string Info1 { get; set; }

    [JsonPropertyName("infoCode")]
    public long InfoCode { get; set; }

    [JsonPropertyName("infos")]
    public List<Info> Infos { get; set; }
}

public partial class Info
{
    [JsonPropertyName("code")]
    public long Code { get; set; }

    [JsonPropertyName("extraInfo1")]
    public string ExtraInfo1 { get; set; }

    [JsonPropertyName("extraInfo2")]
    public string ExtraInfo2 { get; set; }

    [JsonPropertyName("extraInfo3")]
    public string ExtraInfo3 { get; set; }

    [JsonPropertyName("order")]
    public long Order { get; set; }

    [JsonPropertyName("risk")]
    public string Risk { get; set; }

    [JsonPropertyName("alarm")]
    public string Alarm { get; set; }
}

相关问题