c# - 在 .NET Core 3.1 中使用 System.Text.Json 进行反序列化会导致 null 属性值
问题描述
我有以下json:
{
"GameConfig":{
"TeamConstraint":{
"SameTeamPlayers":[
"Raghav",
"Surya"
],
"OppositeTeamPlayers":[
"Wolfman",
"Pawan"
]
},
"Players":[
"Tramp",
"Surya",
"Raghav",
"Krishna",
"Sanjay",
"Bala",
"Wolfman",
"Eagle",
"Sai",
"Pawan",
"Joo",
"Srikanth"
],
"Ranks":{
"Tramp":10,
"Surya":10,
"Raghav":8,
"Krishna":8,
"Eagle":8,
"Sai":8,
"Sanjay":7.5,
"Pawan":5,
"Wolfman":5.0,
"Srikanth":6,
"Bala":4.5,
"Joo":1.5
}
}
}
我正在编写一个简单的控制台应用程序 .NET Core 3.1。我已经尝试过 JSON.NET 以及新的 MSFT System.Text.Json 反序列化器。但是对于以下 Model 对象,我只获得所有属性的空值。
[Serializable]
public class GameConfig
{
public TeamConstraint TeamConstraint { get; set; }
public List<string> Players { get; set; }
public Dictionary<string, double> Ranks { get; set; }
}
[Serializable]
public class TeamConstraint
{
public List<string> OppositeTeamPlayers { get; set; }
public List<string> SameTeamPlayers { get; set; }
}
我已经尝试了几个额外的选项,比如使用带有 CamelCase 属性的合同解析器并相应地更改代码和 json,但到目前为止没有任何效果。我错过了什么?
这是我用来反序列化的代码。
var jsonString = File.ReadAllText(TeamGeneratorStandardSettings.Default.GameConfigFile);
var gameConfig = JsonSerializer.Deserialize<GameConfig>(jsonString);
解决方案
您正在尝试反序列化为GameConfig
,而这只是整个 json 对象结构的顶级属性。您需要一个新的顶级类型来反序列化为包含您的GameConfig
对象的类型。
public class GameData
{
public GameConfig GameConfig { get; set; }
}
var jsonString = File.ReadAllText(TeamGeneratorStandardSettings.Default.GameConfigFile);
var gameConfig = JsonSerializer.Deserialize<GameData>(jsonString);
或者,您可以从 json 中删除包装对象,并且仍然直接反序列化为GameConfig
对象:
{
"TeamConstraint":{
"SameTeamPlayers":[
"Raghav",
"Surya"
],
"OppositeTeamPlayers":[
"Wolfman",
"Pawan"
]
},
"Players":[
"Tramp",
"Surya",
"Raghav",
"Krishna",
"Sanjay",
"Bala",
"Wolfman",
"Eagle",
"Sai",
"Pawan",
"Joo",
"Srikanth"
],
"Ranks":{
"Tramp":10,
"Surya":10,
"Raghav":8,
"Krishna":8,
"Eagle":8,
"Sai":8,
"Sanjay":7.5,
"Pawan":5,
"Wolfman":5.0,
"Srikanth":6,
"Bala":4.5,
"Joo":1.5
}
}
var jsonString = File.ReadAllText(TeamGeneratorStandardSettings.Default.GameConfigFile);
var gameConfig = JsonSerializer.Deserialize<GameConfig>(jsonString);
推荐阅读
- excel - #价值!包含成功编译的 VBA 函数的单元格出错
- javascript - (this)如何在这段代码中工作,javascript?
- javascript - 找到20多个用户mongodb
- django - Apache 服务错误的 Django 项目
- objective-c - 如何在 XPC 服务中提供 Swift 类?
- perl - 当我尝试使用命令 opendir 时,为什么下面的 Perl 代码显示“在连接 (.) 或字符串中使用未初始化的值”
- node.js - 为什么 NPM 审计给出错误并且 NPM 安装不会修复它
- inno-setup - 使用 Inno Setup 对 32 位和 64 位的 AnyCPU DLL 使用 regasm
- arduino - 如何使用像 A/D 转换器这样的 arduino 将 3 个模拟信号从 3 个电位计转换为覆盆子?
- r - 在大型稀疏矩阵上滚动应用