首页 > 解决方案 > Json.NET 不尊重 PreserveReferencesHandling 反序列化

问题描述

我有一个我正在尝试反序列化的团队列表。

class Team  
{
    public string TeamName {get; set;};
    private List<FootballPlayer> _fPlayers = new List<FootballPlayer>();
    public List<FootballPlayer> FPlayers
    {
        get => _fPlaters;
    }
}

class FootballPlayer
{
    private Team _team;

    public string Name { get; set; }
    public Team Team 
    {
        get => _team;
    }

    [JsonConstructor]
    public FootballPlayer(Team team)
    {
        _team = team;
    }
}

我有以下 JSON 设置:

JsonSerializerSettings serializerSettings = new JsonSerializerSettings()
{
    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
    Formatting = Formatting.Indented
};

当我查看序列化输出时,它看起来是正确的,并且节点之间的引用被正确表示。

  {
      "$id": "1",
      "TeamName": "Test",
      "FPlayers": [
      {
        "$id": "2",
        "Team": {
          "$ref": "1"
        },
        "Name": "Leo Messi"
      }
    ]
  }

当数据反序列化时,玩家“Leo Messi”中的属性“Team”为

如何以“Leo Messi”的属性“Team”不为空的方式反序列化此 JSON?

JsonConvert.DeserializeObject<List<Team>>(JsonString, serializerSettings);

标签: c#jsonjson.net

解决方案


推荐阅读