2017-04-04 122 views
0

我试图张贴到使用RestSharp(http://restsharp.org/序列化vb.net类成JSON与RestSharp

一个RESTful API

我的类看起来是这样的:

Public Class CreatePostcard 
    Public Property [to]() As [To] 
    Public Property front() As String 
    ... 
Public Class [to] 
    Public Property address_line1 As string 
    Public Property city As String 
    ... 

我的要求是这样的:

Dim request = New RestRequest("postcards", Method.POST) 
    Dim mm = New CreatePostcard() With {.description = "Test Desc", 
     .to = New [To]() With {.name = FirstName & " " & LastName, .address_line1 = Address1, .address_line2 = Address2, .address_city = City, .address_state = State, .address_zip = Zip}, 
     .from = New From() With {.name = "TestFrom", .address_line1 = "123 Fake St", .address_city = "Bentonville", .address_state = "AK", .address_zip = "90210"}, 
     .back = BackURL, .front = FrontURL, .message = ""} 

    request.AddObject(mm) 

    Dim response2 As IRestResponse(Of Postcard) = client.Execute(Of Postcard)(request) 

的API期待的东西,看起来像这样:

{ 
    "description": "Demo Postcard job", 
    "to": { 
    "address_line1": "123 Test Street", 
    "address_city": "Mountain View", 
    "address_state": "CA", 
    "address_zip": "94041", 
     }, 
    "from": { 
    "name": "Ami Wang", 
    "address_line1": "123 Test Avenue" 
     }, 
    "message": null, 
} 

但是实际上,我在送是:

{ 
    "to": "MyApp.To", 
    "from": "MyApp.From", 
    "front": "http://foo", 
    "back": "http://foo", 
    "message": "", 
    "description": "Test" 
} 

如何正确seralize的对象,并将其发送到宁静的API?

+0

您需要将To和From列出。你只是发送一个字符串。你需要一个数组或列表,这也会反映在你的json中。为什么不使用newtonsoft来序列化和反序列化? –

回答

0

Visual Studio为json生成必要的类。在您的样品JSON,有标签“到”只有一个实例,“从”

  1. 打开项目的Visual Studio
  2. 复制预期的JSON
  3. 在Visual Studio中 - >编辑菜单 - >粘贴Special - >将JSON粘贴为类

请尝试以下代码。我使用Nuget库中的Json.Net进行测试。

Private Sub TestJson() 

    Dim objFromJsonText As String = File.ReadAllText("C:\json.txt") 
    Dim obj As Rootobject 
    obj = JsonConvert.DeserializeObject(Of Rootobject)(objFromJsonText) 

    Dim jsonFromJsonObject = JsonConvert.SerializeObject(obj) 

End Sub 

Public Class Rootobject 
    Public Property description As String 
    Public Property [to] As [To] 
    Public Property from As From 
    Public Property message As Object 
End Class 

Public Class [To] 
    Public Property address_line1 As String 
    Public Property address_city As String 
    Public Property address_state As String 
    Public Property address_zip As String 
End Class 

Public Class From 
    Public Property name As String 
    Public Property address_line1 As String 
End Class