2017-01-14 3 views
1

У меня есть JSON, что, например, выглядит какDeserialize JSON с динамическими свойствами с Json.NET в C#

{"historymatch": 
    { 
    "id":[1581402], 
    "mid":[166], 
    "aid":[5621], 
    "bid":[18548], 
    "date":["24/05/16"], 
    "liveA":[3], 
    "liveB":[1], 
    "redA":[0], 
    "redB":[0], 
    "bc":["3-0"], 
    "ng":[0], 
    "rq":["-1.5"], 
    "rql":[0], 
    "worl":[0], 
    "oworl":[0]}, 
    "match": 
    { 
     "166": 
     { 
      "n":"INT CF", 
      "c":"5691D8" 
     } 
    }, 
    "team": 
    { 
     "5621":"Melbourne Knights", 
     "18548":"Dandenong City SC" 
    }, 
    "note":{} 
} 

Как вы можете видеть, что есть динамические свойства и поля в матче и в команде. я пытался отразить это в моих C# классов

class History<T> where T : new() 
{ 
    public HistoryMatch<T> HistoryMatch { get; set; } 
} 
class HistoryMatch<T> where T: new() 
{ 
    [JsonProperty("id")] 
    public IList<long> MatchId { get; set; } 
    [JsonProperty("mid")] 
    public IList<long> LeagueId { get; set; } 
    [JsonProperty("aid")] 
    public IList<long> TeamAId { get; set; } 


[JsonProperty("bid")] 
    public IList<long> TeamBId { get; set; } 
    [JsonProperty("date")] 
    public IList<string> MatchDate { get; set; } 
    [JsonProperty("liveA")] 
    public IList<long> TeamAScore { get; set; } 
    [JsonProperty("liveB")] 
    public IList<long> TeamBScore { get; set; } 
    [JsonProperty("redA")] 
    public IList<long> TeamARedCard { get; set; } 
    [JsonProperty("redB")] 
    public IList<long> TeamBRedCard { get; set; } 
    [JsonProperty("bc")] 
    public IList<string> HalfTimeScore { get; set; } 
    [JsonProperty("ng")] 
    public IList<long> Ng { get; set; } 
    [JsonProperty("rq")] 
    public IList<string> Rq { get; set; } 
    [JsonProperty("rql")] 
    public IList<long> Rql { get; set; } 
    [JsonProperty("worl")] 
    public IList<long> Worl { get; set; } 
    [JsonProperty("oworl")] 
    public List<long> Oworl { get; set; } 
    [JsonProperty("match")] 
    public Dictionary<string,T> Match { get; set; } 
    [JsonProperty("team")] 
    public Team Team { get; set; } 
    [JsonProperty("note")] 
    public Note Note { get; set; } 
} 

class Match 
{ 
    [JsonProperty("n")] 
    public string Name { get; set; } 
    [JsonProperty("c")] 
    public string Color { get; set; } 
} 

class Team 
{ 
    public Dictionary<string, string> Values { get; set; } 
} 

class Note 
{ 

} 

Тогда я десериализация это следующим образом

var obj = JsonConvert.DeserializeObject<History<Match>>(responseText); 

Он десериализованный без ошибок, но атрибуты Match и Team класса HistoryMatch являются null впоследствии , Теперь я сделал несколько попыток, но мне кажется, что здесь не хватает чего-то существенного. Может кто-нибудь, пожалуйста, дайте мне совет?

ответ

2

В вашем Json Team, Match и Notes не являются частями HistoryMatch, но части History. Определите свой класс History таким образом, я сделал это, я десериализировал вашу команду и сопоставляю значения.

class History<T> where T : new() 
{ 
    public HistoryMatch<T> HistoryMatch { get; set; } 
    [JsonProperty("match")] 
    public Dictionary<string, T> Match { get; set; } 
    [JsonProperty("team")] 
    public Dictionary<string, string> Team { get; set; } 
    [JsonProperty("note")] 
    public Note Note { get; set; } 
} 

И вы не nede определить Team, как отдельный класс, как я вижу его в JSON это просто Dictionary<string, string>

+0

Вы правы! Черт, меня смутили открытые и закрывающие скобки. спасибо за помощь – lichtbringer

Смежные вопросы