1. ホーム
  2. json

[解決済み] .NET NewtonSoft JSONのデシリアライズマップを異なるプロパティ名に変更する。

2022-03-17 15:06:56

質問

外部から受信した以下のJSON文字列があります。

{
   "team":[
      {
         "v1":"",
         "attributes":{
            "eighty_min_score":"",
            "home_or_away":"home",
            "score":"22",
            "team_id":"500"
         }
      },
      {
         "v1":"",
         "attributes":{
            "eighty_min_score":"",
            "home_or_away":"away",
            "score":"30",
            "team_id":"600"
         }
      }
   ]
}

私のマッピングクラスです。

public class Attributes
{
    public string eighty_min_score { get; set; }
    public string home_or_away { get; set; }
    public string score { get; set; }
    public string team_id { get; set; }
}

public class Team
{
    public string v1 { get; set; }
    public Attributes attributes { get; set; }
}

public class RootObject
{
    public List<Team> team { get; set; }
}

が気に入らないということです。 Attributes クラス名 と、その attributes フィールド名 の中に Team クラスがあります。その代わり、名前を TeamScore を削除し、さらに _ をフィールド名から削除し、適切な名前を付けてください。

JsonConvert.DeserializeObject<RootObject>(jsonText);

名前を変更することができます AttributesTeamScore が、フィールド名を変更すると( attributes の中で Team クラス) の場合、正しくデシリアライズされずに null . これを克服するにはどうしたらよいでしょうか。

どのように解決するのですか?

Json.NET - ニュートンソフト には JsonPropertyAttribute というように、JSONのプロパティ名を指定することができるので、コードはこうなります。

public class TeamScore
{
    [JsonProperty("eighty_min_score")]
    public string EightyMinScore { get; set; }
    [JsonProperty("home_or_away")]
    public string HomeOrAway { get; set; }
    [JsonProperty("score ")]
    public string Score { get; set; }
    [JsonProperty("team_id")]
    public string TeamId { get; set; }
}

public class Team
{
    public string v1 { get; set; }
    [JsonProperty("attributes")]
    public TeamScore TeamScores { get; set; }
}

public class RootObject
{
    public List<Team> Team { get; set; }
}

ドキュメンテーション シリアライズ属性