2016-12-07 1 views
0

Я использую API, который предоставляет выходные данные в формате JSON, и я уверен в отношении полей, которые он содержит. Я хочу десериализовать его в виде списка. Я прошел через пространство имен Newtonsoft.Json, но не получил большой помощи. Следующая статья была хорошей, но это не помогло моей цели, поскольку я не знаю пары ключ/значение. Статья: http://www.newtonsoft.com/json/help/html/deserializeobject.htmУдаление дескриптора потока JSON-вывода

Мой код:

static void GetShares() 
{ 
    WebRequest request = WebRequest.Create("https://shares.ppe.datatransfer.microsoft.com/api/v1/data/shares/"); 

    request.Method = "GET"; 
    request.Headers.Add("Authorization","Basic "+ 
    Convert.ToBase64String(
    Encoding.ASCII.GetBytes("useridandpassword"))); 
    request.ContentType = "application/json"; 
    WebResponse response = request.GetResponse(); 
    Stream dataStream = response.GetResponseStream(); 

    // Open the stream using a StreamReader for easy access. 
    StreamReader reader = new StreamReader(dataStream); 

    // Read the content. 
    string responseFromServer = reader.ReadToEnd(); 

    Console.WriteLine(responseFromServer); 
} 
+2

* «Я хочу десериализовать его в удобочитаемом формате». * - JSON уже находится в удобном для восприятия формате, потому что это «просто» строка. Пожалуйста, отредактируйте свой вопрос, чтобы показать образец желаемого формата вывода. На каком языке вы пытаетесь использовать JavaScript или C#? – nnnnnn

+0

В читабельном формате я имею в виду из списка i.e все ключи в одном столбце и соответствующие значения в другом. – dotnetman

+0

@dotnetman Вам не нужно вставлять «Edit 1» в свой заголовок, когда вы редактируете сообщение. У каждого сообщения есть [история изменений] (http://stackoverflow.com/posts/41009904/revisions), которая показывает, что она была отредактирована и что было изменено. Каждый может видеть историю изменений в любом сообщении. –

ответ

0

Это следует сделать это:

WebRequest request = WebRequest.Create("https://shares.ppe.datatransfer.microsoft.com/api/v1/data/shares/"); 

request.Method = "GET"; 
request.Headers.Add("Authorization", "Basic " + 
Convert.ToBase64String(
Encoding.ASCII.GetBytes("userid:password"))); 
request.ContentType = "application/json"; 
WebResponse response = request.GetResponse(); 
Stream dataStream = response.GetResponseStream(); 

// Open the stream using a StreamReader for easy access. 
StreamReader reader = new StreamReader(dataStream); 

// Read the content. 
string responseFromServer = reader.ReadToEnd(); 

JArray items = JArray.Parse(responseFromServer); 

Console.WriteLine($"{"Keys".PadRight(24)}Values"); 
Console.WriteLine($"{"".PadRight(50, '-')}"); 

foreach (JToken token in items) 
{ 
    Dictionary<string, string> dictionary = token.ToObject<Dictionary<string, string>>(); 

    int length = 28; 

    foreach (var property in dictionary) 
    { 
     Console.WriteLine($"{property.Key.PadRight(length)}{property.Value}"); 
    } 

    Console.WriteLine($"----------------------"); 
} 

Это разбирает полезную нагрузку как JArray, захватывает первый элемент (проверьте null первый), deserialises он в словарь и выбирает ключи. Я выбрал 24, поскольку это самая длинная длина ключа. Вы можете сделать переменную заполнения, используя this code.

0

Я выполнил ваш код, и кажется, что он возвращает и распечатывает следующие данные на консоли (не в читаемом формате (с отступом)).

[ 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-06-09T17:23:53-07:00", 
    "directory": "/", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 63, 
    "name": "linuxServerRoot", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:26-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:26-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 6, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-10-17T14:52:06-07:00", 
    "directory": "/Windows_RTM", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 584, 
    "name": "Windows_RTM1.1", 
    "node_id": 7, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:33-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:33-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 3, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T00:40:20-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription--Default no stats", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1401, 
    "name": "WUS-Stats_subscription--Default no stats", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:27-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:27-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T01:06:20-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription-EyeBall", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1408, 
    "name": "WUS-Stats_subscription-EyeBall", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:28-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:28-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T01:06:50-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription-Goku", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1409, 
    "name": "WUS-Stats_subscription-Goku", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:29-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:29-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T01:07:18-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription-Cybersecurity", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1410, 
    "name": "WUS-Stats_subscription-Cybersecurity", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:30-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:30-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T01:08:00-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription-Feature_Phones_Dubai SOR", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1411, 
    "name": "WUS-Stats_subscription-Feature_Phones_Dubai SOR", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:31-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:31-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-29T01:10:47-08:00", 
    "directory": "/Stats_subscription-For-Demo-Do not delete/WUS-Stats_subscription-Nimbus", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1412, 
    "name": "WUS-Stats_subscription-Nimbus", 
    "node_id": 5, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:32-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:32-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    }, 
    { 
    "browse_count": 0, 
    "bytes_free_string": null, 
    "bytes_total_string": null, 
    "bytes_unknown": true, 
    "comment_added_at": null, 
    "content_added_at": null, 
    "created_at": "2016-11-30T15:49:52-08:00", 
    "directory": "/EPRS-Connect/HK-EPRS-NVIDIA", 
    "error_bytes_free_size": null, 
    "error_percent_free": null, 
    "home_share": false, 
    "id": 1467, 
    "name": "HK-EPRS-NVIDIA", 
    "node_id": 7, 
    "percent_free": null, 
    "status": null, 
    "status_at": "2016-12-06T21:24:34-08:00", 
    "status_message": null, 
    "updated_at": "2016-12-06T21:24:34-08:00", 
    "warn_bytes_free_size": null, 
    "warn_percent_free": null 
    } 
] 

И Вы спросили to deserialize it in readable format. Из этого заявления я думаю, что вы хотите напечатать/показать его на консоли в удобном для чтения формате.

Для достижения этой цели вы можете использовать Newtonsoft.Json библиотеки все, что вы должны добавить пакет Json.NET NuGet к вашему проекту и следующий код непосредственно перед Console.WriteLine(responseFromServer); заявления.

JToken jsonToken = JToken.Parse(responseFromServer); 
responseFromServer = jsonToken.ToString(Newtonsoft.Json.Formatting.Indented); 

Это будет печатать/показывать JSON на окне консоли в читаемом формате.

+0

Привет, Vedant ... какой код вы выполнили? тот, который я предоставил мне или сима? – dotnetman

+0

@ dotnetman предоставленный вами. вывод, который я показал в ответе (JSON), отсутствует в читаемом формате. – Vedant

+0

@dotnetman вам просто нужно добавить пакет ** Json.Net ** nuget в свой проект и две строки кода перед тем, как вы распечатаете консоль, которая преобразует неформатированный json в читаемый (отформатированный) json. – Vedant