使用 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 模式,您需要更改的代码就会少得多,以保持您的代码正常工作。
我有一个来自视频游戏的 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 模式,您需要更改的代码就会少得多,以保持您的代码正常工作。