C# 非根对象的JSON反序列化

C# 非根对象的JSON反序列化,c#,.net,json,json.net,C#,.net,Json,Json.net,这就是我的JSON数据的样子,至少有两条记录是这样的: {"version":"1.0","players":{"timestamp":"1532153048","since":"Wed Dec 31 7:00:00 p.m. ET 1969","player":[{"draft_year":"2010","draft_round":"6","nfl_id":"antoniobrown/2508061","rotoworld_id":"5698","stats_id":"24171","posi

这就是我的JSON数据的样子,至少有两条记录是这样的:

{"version":"1.0","players":{"timestamp":"1532153048","since":"Wed Dec 31 7:00:00 p.m. ET 1969","player":[{"draft_year":"2010","draft_round":"6","nfl_id":"antoniobrown/2508061","rotoworld_id":"5698","stats_id":"24171","position":"WR","stats_global_id":"406214","espn_id":"13934","kffl_id":"22341","weight":"181","id":"9988","birthdate":"584514000","draft_team":"PIT","name":"Brown, Antonio","draft_pick":"26","college":"Central Michigan","height":"70","jersey":"84","twitter_username":"AntonioBrown84","sportsdata_id":"16e33176-b73e-49b7-b0aa-c405b47a706e","team":"PIT","cbs_id":"1272852"},{"draft_year":"2018","draft_round":"1","rotoworld_id":"13048","status":"R","stats_id":"30972","position":"RB","stats_global_id":"883302","kffl_id":"37867","weight":"230","id":"13604","draft_team":"NYG","birthdate":"855291600","name":"Barkley, Saquon","draft_pick":"2","college":"Penn State","height":"71","jersey":"26","team":"NYG","cbs_id":"2185957"}]},"encoding":"utf-8"}
我想把它反序列化到一个列表中,现在我只需要几个字段。这是我的模型:

public class MflPlayerJSON
    {
            [JsonProperty(PropertyName = "id")]
            public string ID { get; set; }

            [JsonProperty(PropertyName = "stats_id")]
            public string YahooID { get; set; }

            [JsonProperty(PropertyName = "draft_year")]
            public string DraftYear { get; set; }

            [JsonProperty(PropertyName = "team")]
            public string Team { get; set; }

            [JsonProperty(PropertyName = "name")]
            public string Name { get; set; }
}
这是我的反序列化代码:从测试中我发现我没有正确地反序列化,但我不知道如何做。我试图避免使用多个模型,但如果需要,我会这样做:

var json = await response.Content.ReadAsStringAsync();
                ViewBag.Msg2 = json.ToString();

                var jObject = JObject.Parse(json);
                // list = JsonConvert.DeserializeObject<MflPlayerJSON>(json);
                var s = jObject.Count;
                if (jObject.ContainsKey("players"))
                {
                    ViewBag.Msg = s;
                    list = jObject["players"].ToObject<List<MflPlayerJSON>>();
                }

我是如此接近!请帮助

这里有一个替代解决方案,您可以在其中创建整个模型层次结构。 我将json数据放在一个.json文件中,以避免引号的转义

public class APIResult 
{
    [JsonProperty(PropertyName = "players")]
    public PlayerData PlayerData {get; set;}
}
public class PlayerData
{
    [JsonProperty(PropertyName = "player")]
    public List<MflPlayerJSON> Players {get; set;}
}

public class MflPlayerJSON
{
    [JsonProperty(PropertyName = "id")]
    public string ID { get; set; }

    [JsonProperty(PropertyName = "stats_id")]
    public string YahooID { get; set; }

    [JsonProperty(PropertyName = "draft_year")]
    public string DraftYear { get; set; }

    [JsonProperty(PropertyName = "team")]
    public string Team { get; set; }

    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var json = File.ReadAllText("sample.json");
        var o = JsonConvert.DeserializeObject<APIResult>(json);

    }
}
公共类APIResult
{
[JsonProperty(PropertyName=“players”)]
公共播放器数据播放器数据{get;set;}
}
公共类玩家数据
{
[JsonProperty(PropertyName=“player”)]
公共列表玩家{get;set;}
}
公共类MflPlayerJSON
{
[JsonProperty(PropertyName=“id”)]
公共字符串ID{get;set;}
[JsonProperty(PropertyName=“stats\u id”)]
公共字符串YahooID{get;set;}
[JsonProperty(PropertyName=“草稿年”)]
公共字符串DraftYear{get;set;}
[JsonProperty(PropertyName=“team”)]
公共字符串组{get;set;}
[JsonProperty(PropertyName=“name”)]
公共字符串名称{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var json=File.ReadAllText(“sample.json”);
var o=JsonConvert.DeserializeObject(json);
}
}

players
不是数组,您需要从
players
内部获取
player
是的,我知道,我该怎么做?如果在上面的代码中使用单数“player”,它将不返回任何语言
jObject[“players”][“player”].ToObject()谢谢!这就是我所需要的!然后如何从o中提取要在视图中显示的玩家列表?我原以为打o(点)什么东西行得通,但它对我也不坏。代码在两个属性上缺少两个关键字public。我编辑了它,你现在应该可以做o.PlayerData.Players了
public class APIResult 
{
    [JsonProperty(PropertyName = "players")]
    public PlayerData PlayerData {get; set;}
}
public class PlayerData
{
    [JsonProperty(PropertyName = "player")]
    public List<MflPlayerJSON> Players {get; set;}
}

public class MflPlayerJSON
{
    [JsonProperty(PropertyName = "id")]
    public string ID { get; set; }

    [JsonProperty(PropertyName = "stats_id")]
    public string YahooID { get; set; }

    [JsonProperty(PropertyName = "draft_year")]
    public string DraftYear { get; set; }

    [JsonProperty(PropertyName = "team")]
    public string Team { get; set; }

    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var json = File.ReadAllText("sample.json");
        var o = JsonConvert.DeserializeObject<APIResult>(json);

    }
}