2015-02-04 3 views
0

У меня есть следующий ответ от URL. Как мне закодировать для загрузки двух файлов на мой жесткий диск с именем = id.Загрузить файлы с веб-сервера

HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "files": [ 
    { 
     "format": "fillz-order-tab", 
     "checksum": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", 
     "acknowledged": false, 
     "uri": "https://file-api.fillz.com/v1/orders/created/20140611T003336Z-8b975127", 
     "date_created": "20140611T003336Z", 
     "id": "20140611T003336Z-8b975127" 
    }, 
    { 
     "format": "fillz-order-tab", 
     "checksum": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35", 
     "acknowledged": false, 
     "uri": "https://file-api.fillz.com/v1/orders/created/20140611T013545Z-3e2f2083", 
     "date_created": "20140611T013545Z", 
     "id": "20140611T013545Z-3e2f2083" 
    } 
    ] 
} 

Мой код, который вызывает URL выглядит следующим образом:

Using response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse) 
        Dim reader As New StreamReader(response.GetResponseStream()) 
        result = reader.ReadToEnd() 

Я использую json.net с Visual Basic 2008.

Это мои классы

Public Class file 
    Public format As String 
    Public checksum As String 
    Public acknowledged As String 
    Public uri As String 
    Public date_created As String 
    Public id As String 
End Class 


Public Class RootObject 
    Public Property files() As List(Of file) 
     Get 

     End Get 
     Set(ByVal value As List(Of file)) 

     End Set 

    End Property 
End Class 

Это мой код для результатов deserializare json

Dim res As RootObject = JsonConvert.DeserializeObject(Of FillzAPI.FileAPI.RootObject)(result) 

Я хочу прочитать каждый идентификатор из ответа URL-адрес

For Each Data As FileAPI.RootObject In res 

Next 

У меня есть следующая ошибка:

Выражение имеет тип «FillzAPI.FileAPI.RootObject», который не является типом коллекции ,

Как исправить эту ошибку?

+0

Ответ, который вы показываете, выглядит как JSON. Вам нужно исследовать, как его анализировать, чтобы вы могли извлекать значения «uri». –

+0

Спасибо, Андрей, ты дал мне подсказку. Но я все еще придерживаюсь этого кода. – Berenice

ответ

0

Несколько моментов, которые дадут вам рабочий код:

  • Существует простой способ загрузки данных в формате JSON.
  • Вы случайно объявили RootObject.filesкак массив списков и его Get и Set методы являются пустыми.
  • File является неудачным именем для класса, поскольку конфликтует с System.IO.File.
  • Было бы лучше иметь вещей в (что я назвал) FileData как свойства. Вы можете взять преимущество авто-объявленных свойств и не вводить методы Get/Set.

Собираем все те вместе, я прибыл в

Option Infer On 

Imports System.IO 
Imports System.Net 
Imports Newtonsoft.Json 

Module Module1 

    Public Class FileData 
     Public Property format As String 
     Public Property checksum As String 
     Public Property acknowledged As String 
     Public Property uri As String 
     Public Property date_created As String 
     Public Property id As String 
    End Class 

    Public Class RootObject 
     Public Property Files As List(Of FileData) 
    End Class 

    Sub Main() 
     ' I set this up on a local web server. Adjust as required. 
     Dim src = "http://127.0.0.1/JsonSample.txt" 

     ' An easy way to get a string from a web server... 
     Dim wc As New WebClient 
     'TODO: Try..Catch any error that wc.DownloadString throws. 
     Dim jsonData = wc.DownloadString(src) 

     'TODO: Try..Catch any error that JsonConvert.DeserializeObject throws. 
     Dim y = JsonConvert.DeserializeObject(Of RootObject)(jsonData) 

     ' Somewhere to save the downloaded files... 
     Dim dest = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "My JSON test") 
     If Not Directory.Exists(dest) Then 
      Directory.CreateDirectory(dest) 
     End If 

     For Each x In y.Files 
      Console.WriteLine(x.uri) 
      'TODO: Try..Catch any error that wc.DownloadFile throws. Also perhaps use async methods. 
      wc.DownloadFile(x.uri, Path.Combine(dest, x.id)) 
     Next 

     Console.ReadLine() 

    End Sub 

End Module 

который выводит

https://file-api.fillz.com/v1/orders/created/20140611T003336Z-8b975127
https://file-api.fillz.com/v1/orders/created/20140611T013545Z-3e2f2083

и сохраняет файлы.

+0

Благодарим за помощь! – Berenice

 Смежные вопросы

  • Нет связанных вопросов^_^