当对象数量未知时反序列化Json

时间:2014-02-25 10:30:22

标签: c# json deserialization json-deserialization

我有一个Json字符串:

{
    "B" : 
    {
        "JackID" : "1",
        "Faction" : "B",
        "Regard" : "24",
        "Currency" : "1340",
        "factionName" : "Buccaneer",
        "factionKing" : "22",
        "Tcurrency" : "0",
        "currencyname" : "Pieces of Eight",
        "textcolor" : "#FFFFFF",
        "bgcolor" : "#000000"
    },
    "P" : 
    {
        "JackID" : "1",
        "Faction" : "P",
        "Regard" : "20",
        "Currency" : "250",
        "factionName" : "Privateer",
        "factionKing" : "4",
        "Tcurrency" : "0",
        "currencyname" : "Privateer Notes",
        "textcolor" : "#000000",
        "bgcolor" : "#FFFF00"
    },
    "N" : 
    {
        "JackID" : "1",
        "Faction" : "N",
        "Regard" : "12",
        "Currency" : "0",
        "factionName" : "Navy",
        "factionKing" : "7",
        "Tcurrency" : "0",
        "currencyname" : "Navy Chits",
        "textcolor" : "#FFFFFF",
        "bgcolor" : "#77AADD"
    },
    "H" : 
    {
        "JackID" : "1",
        "Faction" : "H",
        "Regard" : "-20",
        "Currency" : "0",
        "factionName" : "Hiver",
        "factionKing" : "99",
        "Tcurrency" : "0",
        "currencyname" : "",
        "textcolor" : "#000000",
        "bgcolor" : "#CC9900"
    }
}

我正在使用James Newton-King的Json.NET解析器并调用:

JackFactionList jackFactionList = JsonConvert.DeserializeObject<JackFactionList>(sJson);

我的课程定义如下:

namespace Controller
{
    public class JackFactionList
    {
        public JackFaction B;
        public JackFaction P;
        public JackFaction N;
        public JackFaction H;
    }

    public class JackFaction
    {
        public int JackId { get; set; }
        public string Faction { get; set; }
        public int Regard {get; set;}
        public int Currency {get; set;}
        // Faction details
        public string factionName {get; set;}
        public string factionKing {get; set;}
        public int Tcurrency {get; set;}
        public string currencyname {get; set;}
        public string textcolor {get; set;}
        public string bgcolor {get; set;}
    }
}

这一切都有效,但原始列表可能有不同的JackFactions而不是B,P,N和H.理想情况下我想得到的是:

public class JackFactionList
{
    public List<JackFaction> factionList;
}

在不更改Json字符串的情况下,如何将JackFactions作为列表而不是单个对象?

1 个答案:

答案 0 :(得分:8)

您可以将其序列化为字典:

var jackFactionList = JsonConvert.DeserializeObject<Dictionary<string,JackFaction>>(sJson);

然后你可以得到值:

List<JackFaction> result = jackFactionList.Values.ToList();