我从json格式的服务器上获取匹配数据。在这个json中,有两个属性(键),它们的名称是可变的和动态的,并取决于灯具。 例如,我获得了fix_id 256的匹配数据
{
"api": {
"results": 1,
"fixtures": [
{
"fixture_id": 256,
"league_id": 21,
"homeTeam": {
"team_id": 12,
"team_name": "Tottenham"
},
"awayTeam": {
"team_id": 13,
"team_name": "Everton"
},
"lineups": {
"Tottenham": {
"coach": "qqqq",
"formation": "4-2-3-1"
},
"Everton": {
"coach": "rrrr",
"formation": "4-2-3-1"
}
}
}
]
}
}
此json的类
public class rootMatch
{
[JsonProperty("api")]
public Api Api { get; set; }
}
public class Api
{
[JsonProperty("results")]
public long Results { get; set; }
[JsonProperty("fixtures")]
public List<Fixture> Fixtures { get; set; }
}
public partial class Fixture
{
[JsonProperty("fixture_id")]
public long FixtureId { get; set; }
[JsonProperty("league_id")]
public long LeagueId { get; set; }
[JsonProperty("homeTeam")]
public Team HomeTeam { get; set; }
[JsonProperty("awayTeam")]
public Team AwayTeam { get; set; }
[JsonProperty("lineups")]
public Lineups Lineups { get; set; }
}
public class Lineups
{
[JsonProperty("Tottenham")]
public Team Tottenham{ get; set; }
[JsonProperty("Everton")]
public Team Everton{ get; set; }
}
public class Team
{
[JsonProperty("coach")]
public string Coach { get; set; }
[JsonProperty("formation")]
public string Formation { get; set; }
}
但是,rootMatch类仅适用于此json。
有没有办法在反序列化期间更改Data属性的名称,将其更改为静态名称?
阵容中的第一个TeamName->更改为HomeTeam
和
阵容中的第二个TeamName->更改为AwayTeam
例如,在此json“阵容”
(热刺转换-> HomeTeam)
和
(Everton转换-> AwayTeam)
答案 0 :(得分:1)
“有问题的” JSON是具有两个属性的对象,其中属性名称是团队名称。这些是事先未知的。为此,您可以使用字符串键将类型更改为字典。
要创建有意义的名称,我对您的类型进行了一些调整:
这是团队:
public class Team
{
[JsonProperty("team_id")]
public int TeamId { get; set; }
[JsonProperty("team_name")]
public string TeamName { get; set; }
}
这是一个阵容:
public class Lineup
{
[JsonProperty("coach")]
public string Coach { get; set; }
[JsonProperty("formation")]
public string Formation { get; set; }
}
然后灯具变为:
public partial class Fixture
{
[JsonProperty("fixture_id")]
public long FixtureId { get; set; }
[JsonProperty("league_id")]
public long LeagueId { get; set; }
[JsonProperty("homeTeam")]
public Team HomeTeam { get; set; }
[JsonProperty("awayTeam")]
public Team AwayTeam { get; set; }
[JsonProperty("lineups")]
public Dictionary<string, Lineup> Lineups { get; set; }
}
注意如何在C#中将lineups
JSON属性映射到Dictionary<string, Lineup>
。
在这里,您可以获取主队和客队的阵容:
var root = JsonConvert.DeserializeObject<rootMatch>(json);
var fixture = root.Api.Fixtures.First();
var homeTeamLineup = fixture.Lineups[fixture.HomeTeam.TeamName];
var awayTeamLineup = fixture.Lineups[fixture.AwayTeam.TeamName];
团队名称在字典中用作键。
我使用First
来选择第一个灯具。您可能会使用LINQ或循环来处理所有灯具。
答案 1 :(得分:1)
您可以添加属性
[JsonExtensionData]
public Dictionary<string, object> AdditionalData { get; set; }
这将包含所有不匹配的属性。然后,您可以遍历字典并根据需要处理这些数据。