![](/img/trans.png)
[英]System.Text.Json access Json object of json object using c# .net core 3.1
[英]Deserialization with System.Text.Json in .NET Core 3.1 results in null property values
我有以下 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 解串器。 但是我只得到所有屬性的 null 值,下面是 Model object。
[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 object 結構的頂級屬性。 您需要一個新的頂級類型來反序列化,其中包含您的GameConfig
object。
public class GameData
{
public GameConfig GameConfig { get; set; }
}
var jsonString = File.ReadAllText(TeamGeneratorStandardSettings.Default.GameConfigFile);
var gameConfig = JsonSerializer.Deserialize<GameData>(jsonString);
或者,您可以從 json 中刪除包裝 object 並仍然直接反序列GameConfig
object:
{
"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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.