使用通用列表反序列化对象

时间:2014-06-19 16:33:30

标签: c# json.net

我正在尝试反序列化一个对象,该类型已填充,但我为List<Sport>获取了null。有任何想法吗?

我的课程:

class Sports
{
    public MsgTypes type { get; set; }
    public List<Sport> Sport { get; set; }
}

class Sport
{
    public int Id { get; set; }
    public int Import_id { get; set; }
    public string Name { get; set; }
    public int Active { get; set; }
    public int Order { get; set; }
    public int Min_bet { get; set; }
    public int Max_bet { get; set; }
    public int Updated { get; set; }
    public string Feed_type { get; set; }
    public string Locale { get; set; }
}

反序列化命令:

Sports _sports = (Sports) JsonConvert.DeserializeObject<Sports>(jsonObj);

这是我的JSON对象:

"{\"code\":0,\"type\":4,\"Sports\":[{\"Sport\":{\"id\":\"1\",\"import_id\":\"1\",\"name\":\"Soccer\",\"active\":true,\"order\":\"1\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194889\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"2\",\"import_id\":\"5\",\"name\":\"Tennis\",\"active\":true,\"order\":\"3\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194771\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"3\",\"import_id\":\"6\",\"name\":\"Handball\",\"active\":true,\"order\":\"6\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403152901\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"4\",\"import_id\":\"4\",\"name\":\"Ice Hockey\",\"active\":true,\"order\":\"4\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403080245\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"7\",\"import_id\":\"2\",\"name\":\"Basketball\",\"active\":true,\"order\":\"2\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194830\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"8\",\"import_id\":\"23\",\"name\":\"Volleyball\",\"active\":true,\"order\":\"5\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194591\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"9\",\"import_id\":\"12\",\"name\":\"Rugby\",\"active\":true,\"order\":\"7\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194710\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"12\",\"import_id\":\"11\",\"name\":\"Motorsport\",\"active\":true,\"order\":\"12\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403065699\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"13\",\"import_id\":\"3\",\"name\":\"Baseball\",\"active\":true,\"order\":\"13\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194834\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"14\",\"import_id\":\"16\",\"name\":\"American Football\",\"active\":true,\"order\":\"14\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403143326\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}},{\"Sport\":{\"id\":\"16\",\"import_id\":\"34\",\"name\":\"Beach Volley\",\"active\":true,\"order\":\"16\",\"min_bet\":\"0\",\"max_bet\":\"0\",\"updated\":\"1403194417\",\"feed_type\":\"Betradar\",\"locale\":\"en_us\"}}]}"

1 个答案:

答案 0 :(得分:0)

您需要更多级别的嵌套和不同的类名。您应该能够反序列化为这样的结构:

class SportsParent
{
    //Code for MsgTypes was not provided so it is commented out
    public List<SportGroup> Sports { get; set; }
}

class SportGroup
{
    public SportItem Sport { get; set; }
}

class SportItem
{
    public int Id { get; set; }
    public int Import_id { get; set; }
    public string Name { get; set; }
    public bool Active { get; set; }    //need to be converted to bool instead of int
    public int Order { get; set; }
    public int Min_bet { get; set; }
    public int Max_bet { get; set; }
    public int Updated { get; set; }
    public string Feed_type { get; set; }
    public string Locale { get; set; }
}

您可以使用此类代码进行反序列化:

SportsParent _sports = JsonConvert.DeserializeObject<SportsParent>(jsonObj);