使用 System.Text.Json 将 json 反序列化为多个 类

Deserialize json into multiple classes with System.Text.Json

我有一个来自视频游戏的 json,在根级别有大约 1000 个值并使用蛇形键,我如何将它反序列化为多个 类 和 System.Json.Text?谢谢

例如

{
    "onlinepvp_kills:all": 0,
    "onlinepve_kills:all": 0
}

public class Online
{
    public PVP PVP { get; set; }
    public PVE PVE { get; set; }
}

public class PVP
{
    public int Kills { get; set; }
}

public class PVE
{
    public int Kills { get; set; }
}

您的 JSON 架构与您的 class 不直接匹配。您最好创建 classes 旨在使反序列化更容易,然后使用 Adapter Pattern 创建 classes 以满足您使用 c# json 版本的需求。

public class OnlineKillsSource
{
  
  [JsonPropertyName("onlinepvp_kills:all")]
  public int PVP { get; set; }
  [JsonPropertyName("onlinepve_kills:all")]
  public int PVE { get; set; }
}

然后使用带有构造函数的适配器模式:

public class Online
{
    public (OnlineKillsSource source)
    {
      PVP = new PVP { Kills = source.PVP };
      PVE = new PVE { Kills = source.PVE };
    }

    public PVP PVP { get; set; }
    public PVE PVE { get; set; }
}

public class PVP
{
    public int Kills { get; set; }
}

public class PVE
{
    public int Kills { get; set; }
}

用法:

JsonSerializer.Deserialize<OnlineKillsSource>(jsonString);

var online = new Online(OnlineKillSource);

现在,您 Separate the Concerns 反序列化外部数据并将数据转换为标准消耗品的优势。

如果您的数据源更改了 JSON 模式,您需要更改的代码就会少得多,以保持您的代码正常工作。