簡體   English   中英

使用 .NET Core 3.1 中的 System.Text.Json 反序列化會導致 null 屬性值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM