2017-07-24 21 views
1

我可以將REST JSON加載到數組中。但我需要加載數據字典來訪問nametype所以可以在treeView1關於從JSON創建字典的問題

JSON的樣子

{"currentVersion" : 10.05, 
    "folders" : [], 
    "services" : [ 
    {"name" : "appData/Drainage", "type" : "MapServer"}, 
    {"name" : "appData/Parks", "type" : "MapServer"}, 
    {"name" : "appData/Planning", "type" : "MapServer"}, 
    {"name" : "appData/QNet", "type" : "MapServer"}, 
    {"name" : "appData/Sanitary", "type" : "MapServer"}, 
    {"name" : "appData/Street_Lights", "type" : "MapServer"}, 
    {"name" : "appData/Survey", "type" : "MapServer"}, 
    {"name" : "appData/Transportation", "type" : "MapServer"}, 
    {"name" : "appData/Water", "type" : "MapServer"} 
    ] 
} 

使用此代碼顯示出來,我只能夠name上顯示treevView

var client = new HttpClient(); 
var response = await client.GetAsync(url); 
var json = await response.Content.ReadAsStringAsync(); 
var model = JsonConvert.DeserializeObject<ServiceResponse>(json); 
var servicesList = model.services.Select(s => s.name.Replace("app/", "")).ToArray(); 
foreach (string value in servicesList) 
{ 
    treeView1.Nodes.Add(value); 
} 

,如:

enter image description here

,但我需要有像

enter image description here

我alreadytried添加字典這樣

Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); 

機器人不知道如何從那裏獲取數據,並適用於treeView1

+0

你有沒有考慮映射到數據結構呢? –

+0

感謝丹尼爾的回覆,但可以控制你請讓我知道你是什麼意思? –

回答

1

如果你正在嘗試從你提供的,你可以嘗試這樣的事情

不知道什麼ServiceResponse是JSON這類結果,所以我創造了它,只是爲了演示

string json = @"{'currentVersion' : 10.05, 
    'folders' : [], 
    'services' : [ 
     {'name' : 'appData/Drainage', 'type' : 'MapServer'}, 
     {'name' : 'appData/Parks', 'type' : 'MapServer'}, 
     {'name' : 'appData/Planning', 'type' : 'MapServer'}, 
     {'name' : 'appData/QNet', 'type' : 'MapServer'}, 
     {'name' : 'appData/Sanitary', 'type' : 'MapServer'}, 
     {'name' : 'appData/Street_Lights', 'type' : 'MapServer'}, 
     {'name' : 'appData/Survey', 'type' : 'MapServer'}, 
     {'name' : 'appData/Transportation', 'type' : 'MapServer'}, 
     {'name' : 'appData/Water', 'type' : 'MapServer'} 
    ] 
}"; 

var model = JsonConvert.DeserializeObject<ServiceResponse>(json); 

var services = model.Services.Select(t => new Service 
{ 
    Name = t.Name.Replace("appData/", ""), 
    Type = t.Type 
}).OrderBy(t => t.Name).ToList(); 

foreach (var service in services) 
{ 
    string value = $"{service.Name} - ({service.Type})"; 

    //treeView1.Nodes.Add(value); 

    Console.WriteLine(value); 
} 


public class ServiceResponse 
{ 
    public string CurrentVersion { get; set; } 
    public List<string> Folders { get; set; } 
    public List<Service> Services { get; set; } 
} 

public class Service 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
} 

關於Enumerable.Select的注意事項它將一個序列的每個元素投影到一個新的表單中。 你的情況servicesList只是你從表達式返回的字符串數組。