簡體   English   中英

C#將JSON反序列化為字典 <int,Tuple<string,int> &gt;

[英]C# deserializing JSON to Dictionary<int,Tuple<string,int>>

我有一個具有以下結構的JSON文件:

[ {"unit_id": {"type":[string],"customer_id":[int]} },

...,

...]

我想將其轉換為結構的字典(或任何有用的東西):

Dictionary<int,Tuple<string,int>>

我正在嘗試以下方法:

Dictionary<int, Tuple<string,int>> units =
JsonConvert.DeserializeObject<Dictionary<int, Tuple<string, int>>>
(File.ReadAllText(jsonFile));

失敗是因為無法將文件反序列化為該結構。 我也嘗試過創建一個類:

class Unit{
    public int unitID;
    public Tuple<string, int> details;
}

接着:

List<Unit> units = JsonConvert.DeserializeObject<List<Unit>>(File.ReadAllText(jsonFile));

這不會失敗,但是不會用任何值填充列表。

謝謝

對於您的JSON結構,您可能需要創建這樣的類:

    class Unit
    {
        public CustomerType UnitId;
    }

    class CustomerType
    {
        public int CustomId { get; set; }
        public string Type { get; set; }
    }

或使用dynamic

        Unit unit = new Unit();
        unit.UnitId = new CustomerType()
        {
            CustomId = 1001,
            Type = "Customer"
        };

        //generate test json string
        string jsonTest = JsonConvert.SerializeObject(unit);

        //convert to dynamic
        var result = JsonConvert.DeserializeObject<dynamic>(jsonTest);
        Console.WriteLine(result.UnitId.CustomId);
        Console.WriteLine(result.UnitId.Type);

因此,我設法用以下(混亂)代碼創建了字典:

public static Dictionary<int, Tuple<string, int>> parseJsonIntoDictionary(string jsonFile) {
    Dictionary<int, Tuple<string, int>> unitDictionary = new Dictionary<int,Tuple<string,int>>();
    var json = System.IO.File.ReadAllText(jsonFile);
    var units = JArray.Parse(json);
    foreach (JToken unit in units) {
        JProperty property = ((JObject)unit).Properties().ToArray()[0];
        int unitID = Convert.ToInt32(property.Name);
        Tuple<string,int> tempTuple = new Tuple<string,int>(Convert.ToString(unit[property.Name]["unit_type"]),Convert.ToInt32(unit[property.Name]["customer_id"]));
        unitDictionary[unitID] = tempTuple;
    }
    return unitDictionary;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM