如何在vb.net webservice中处理复杂的json数据

时间:2018-04-23 17:13:43

标签: vb.net rest

我(尝试)在VB.net中创建一个RestApi,并且在将数据发布到我的端点时遇到了死胡同。如果我使用一个简单的json文件通过邮递员发布它并将其绑定到我的数据类它很好但是一旦Data类变得更复杂它就不再有效了。我的意思是像下面这样的课程

<First>
<Last>
<AddressLine1>
<City>
<State>

但是

<UserInfo>
   <Name>
      <First>
      <Last>
   </Name>
   <Address>
      <AddressLine1>
      <City>
      <State>
   </Address>
</UserInfo>

没有。所以这是我的2个问题 A)有没有办法让Parser中的构建处理比上面更复杂的数据类,因为这不起作用

Public Function PostValue(<FromBody()> ByVal value As User_Info) As String
 If ModelState.IsValid Then
   Console.Write(value.address.CITY)
   Return "OK"
 Else
   Return "Error"
 End If
End Function

b)访问身体中张贴的json的替代方法是什么,所以我可以手动 将值分配给我的复杂数据类?

1 个答案:

答案 0 :(得分:0)

您的示例不是JSON。如果您只使用内置功能,这很容易。

这是你班级的样子

<DataContract()>
Class UserInfo
    <DataMember>
    Public Name As New Name
    <DataMember>
    Public Address As New Address
End Class

<DataContract()>
Class Name
    <DataMember>
    Public First As String
    <DataMember>
    Public Last As String
End Class

<DataContract()>
Class Address
    <DataMember>
    Public AddressLine1 As String
    <DataMember>
    Public City As String
    <DataMember>
    Public State As String
End Class

这是一个保存到JSON并将其加载回来的示例。

    Imports System.IO
    Imports System.Runtime.Serialization.Json
    Imports System.Runtime.Serialization

    Dim ui As New UserInfo

    ' Initialize
    ui.Name.First = "f"
    ui.Name.Last = "l"
    ui.Address.AddressLine1 = "a"
    ui.Address.City = "c"
    ui.Address.State = "s"

    ' Write to stream
    Dim stream As New MemoryStream
    Dim ser As New DataContractJsonSerializer(GetType(UserInfo))

    ser.WriteObject(stream, ui)

    ' Show data
    stream.Position = 0
    Dim sr = New StreamReader(stream)
    Dim jsonData As String = sr.ReadToEnd()
    Console.WriteLine(jsonData)

    ' Bring it back
    Dim ui2 As UserInfo
    stream.Position = 0
    ui2 = ser.ReadObject(stream)

    Console.WriteLine(ui.Name.First)
    Console.WriteLine(ui.Name.Last)
    Console.WriteLine(ui.Address.AddressLine1)
    Console.WriteLine(ui.Address.City)
    Console.WriteLine(ui.Address.State)

这将是生成的JSON

{
  "Address":
  {
    "AddressLine1":"a",
    "City":"c",
    "State":"s"
  },
  "Name":
  {
    "First":"f",
    "Last":"l"
  }
}