2016-12-26 2 views
1

Я использую HttpClient для получения данных по ссылке.Преобразование ответа на доступные свойства объекта

Вот мой ответ:

#S7Z OK 
#Mon Dec 26 02:26:58 EST 2016 
image.anchor=168,186 
image.embeddedIccProfile=0 
image.embeddedPhotoshopPaths=0 
image.embeddedXmpData=0 
image.expiration=-1.0 
image.height=373 
image.iccProfile=sRGB IEC61966-2.1 
image.mask=1 
image.photoshopPathnames= 
image.pixTyp=RGB 
image.printRes=72 
image.resolution=34 
image.thumbRes=17 
image.thumbType=2 
image.timeStamp=1481737849826 
image.width=336 

Я хочу, чтобы преобразовать этот ответ доступного объекта.

Вот моя httpclient работа:

using (var client = getHttpClient()) 
{ 
    HttpResponseMessage response = await client.GetAsync(path); 
    if (response.IsSuccessStatusCode) 
    { 
     //var imageData = await response.Content.ReadAsAsync<imageData>(); 
     //imageData.timeStamp 
    } 
    else 
    { 
     //TODO: Need to handle error scenario 
    } 
} 

Я добавил комментарии, чтобы сделать вам идею, что я хочу сделать. На самом деле, я хочу получить значение image.timeStamp от ответа.

Спасибо!

ответ

4

Вы можете сделать это, сохранив ответ в словаре, а затем вы можете получить доступ к любому члену как var x= dic["timeStamp"];, вы также можете расширить реализацию путем преобразования dic в dynamic object.

Edit:

Stream receiveStream = response.GetResponseStream(); 
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8); 
var text = readStream.ReadToEnd(); 
// Split the content into chunks 
foreach(var ch in chunks) 
{ 
     string[] kv = ch.Split('=');     
     dic.Add(kv[0], kv[1]); 
} 
+0

Спасибо за ваш ответ. Можете ли вы показать мне, как я могу преобразовать данные ответа в словарь? – Saadi

+1

Кажется, это хороший вариант. Благодаря! но он имеет некоторые неправильные значения в словаре. Я использую regex, чтобы исправить это. – Saadi

0

Вот что я сделал, чтобы заставить его работать. (с помощью doe_deo ответить)

using (var client = getHttpClient()) 
{ 
    HttpResponseMessage response = await client.GetAsync(path); 
    if (response.IsSuccessStatusCode) 
    { 
     var data = await response.Content.ReadAsStringAsync(); 
     Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
     var rx = new Regex(@"(.*?)\s*=\s*([^\s]+)"); 
     foreach (Match m in rx.Matches(data)) 
     { 
      dictionary.Add(m.Groups[1].ToString(), m.Groups[2].ToString()); 
     } 
    } 
    else 
    { 
     //TODO: Need to handle error scenario 
    } 
} 
Смежные вопросы