2015-09-13 44 views
1

我与结构的JSON文件:C#反序列化JSON到词典<INT,元组<string,int>>

[ {"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)); 

这将失败,因为文件不能被反序列化INT那个结构。我也尝试创建一个类:

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

然后:

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

这并不失败,但不填充任何值列表。

感谢

回答

2

为了您的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); 
+0

嗨,禅,谢谢你的回答,但我设法解决它自己在阅读你的答案之前。虽然谢谢! –

+0

@StefanOrr没问题,快乐编码! – Zen

0

所以我设法建立我的字典以下(杂乱)代码:

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; 
} 
相关问题