【问题标题】:Referring to c# objects in JSON在 JSON 中引用 c# 对象
【发布时间】:2020-07-18 17:39:58
【问题描述】:

我有两个 JSON 文件。一个包含有关球员的信息,另一个包含有关他的球队的信息。
我在 C# 中反序列化了团队 JSON 文件并创建了一个团队对象。在播放器类中,有一个属性“teamassigned”,我希望它的值是我之前创建的团队对象,但我想将它存储在 JSON 文件中。

驱动程序的 JSON

{
    "driverName": "Esyltt Aviars",
    "teamAssigned": TEAM OBJECT HERE,
    "DefendingScore": 47,
    "BrakingScore": 80,
    "CorneringScore": 38,
    "RaceStartScore": 92,
    "ConsistencyScore": 74,
    "FocusScore": 55 
}

团队的 JSON

{
    "teamID": 1,
    "teamName": "Mclaren",
    "teamColor": "orange"
}

【问题讨论】:

  • 如果没有办法做到这一点,那么您能否建议一些方法来存储这样的信息,因为我有大约 12 个团队和 24 个司机
  • 你只需要使用嵌套的 JSON 对象; w3schools.com/js/js_json_objects.asp
  • 向我们展示您的 C# 类。

标签: c# json object


【解决方案1】:

您可以通过以下方式实现:

您的球员和球队课程将是:

public class Team  
{
     public int teamID { get; set; } 
     public string teamName { get; set; } 
     public string teamColor { get; set; }    
}    
public class Player
{
     public string driverName { get; set; } 
     public Team teamAssigned { get; set; } 
     public int DefendingScore { get; set; } 
     public int BrakingScore { get; set; } 
     public int CorneringScore { get; set; } 
     public int RaceStartScore { get; set; } 
     public int ConsistencyScore { get; set; } 
     public int FocusScore { get; set; } 
}

当反序列化这些类的数据时,生成的 Json 将是:

{
    "driverName": "Esyltt Aviars",
    "team": {
    "teamID": 1,
    "teamName": "Mclaren",
    "teamColor": "orange"
      },
    "DefendingScore": 47,
    "BrakingScore": 80,
    "CorneringScore": 38,
    "RaceStartScore": 92,
    "ConsistencyScore": 74,
    "FocusScore": 55 
}

根据需要更新答案

上面两个类 Player 和 Team 用于将 Json 数据反序列化为对象,如下所示:

var objPlayer = JsonConvert.DeserializeObject<Player>(playerJson);
var objTeam = JsonConvert.DeserializeObject<Team>(teamJson);

结果在两个对象中获得了数据。现在将两个对象数据分配给类型为 Player 的新对象,同时将对象 Team 的值分配给字段“teamAssigned”,如下所示:

var objMerged = new Player()
{
    driverName = objPlayer.driverName,
    teamAssigned = new Team() 
                   { 
                     teamID = objTeam.teamID,
                     teamName = objTeam.teamName, 
                     teamColor = objTeam.teamColor 
                   },
    DefendingScore = objPlayer.DefendingScore,
    BrakingScore = objPlayer.BrakingScore,
    CorneringScore = objPlayer.CorneringScore,
    RaceStartScore = objPlayer.RaceStartScore,
    ConsistencyScore = objPlayer.ConsistencyScore,
    FocusScore = objPlayer.FocusScore,
};

现在,将此对象“objMerged”序列化为 Json:

var convertToJson = JsonConvert.SerializeObject(objMerged);

“convertToJson”中的结果 Json 将根据要求,属性“teamassigned”的值是团队对象。

【讨论】:

  • 啊,我想我没有正确地问这个问题。我已经设置了团队对象。因为它有一个对象。团队对象从单独的 json 文件中反序列化。
  • 是否要将 Team Json 对象包含在 Player Json 对象中,其中 Team 对象将被分配给 'teamassigned'?
  • 是的。团队 json 文件在玩家 json 之前被反序列化。
  • @KevTech 如果我的回答对你有用,请将其标记为回答并投票。
猜你喜欢
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2011-11-25
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多