Я пытаюсь выяснить класс/структуру для обработки следующего формата JSON:
{
"ReturnData": [
{
"id": "msg2DoesNotExistName",
"value": "value 1",
"userExists": 2
},
{
"id": "msg2DoesNotExistName",
"value": "Value 2",
"userExists": 2
}
],
"SetValue": [
{
"id": "msg2DoesNotExistName",
"value": "value 1"
},
{
"id": "msg2DoesNotExistName",
"value": "Value 2"
}
]
}
Я пробовал (только часть SetValue):
<Serializable()> _
Public Class Stuff
Public SetValue() As ArrayList
End Class
Public Function TestSerial3(ByVal somevar As String) As String
Dim s As New JavaScriptSerializer()
Dim ret As String
Dim b As New SaveType()
Dim p1 As New Stuff
b = New SaveType
b.id = "ctl00_number_1"
b.value = "Test1"
p1.SetValue(0).Add(b)
b = New SaveType
b.id = "ctl100_number_2"
b.value = "Test2"
p1.SetValue(1).Add(b)
ret = s.Serialize(p1)
return ret
end function
Вот результат: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Я могу сериализовать внутреннюю часть с помощью структуры, но не могу понять, как включить внешнее имя (ReturnData, SetValue), не прибегая к построению строк:
<Serializable()> _
Public Structure UserExistsType
Public id As String
Public value As String
Public userExists As Integer
End Structure
Dim b(1) As UserExistsType
b(0).id = "msg2DoesNotExistName"
b(0).value = "value 1"
b(0).userExists = 2
b(1).id = "msg2DoesNotExistName"
b(1).value = "Value 2"
b(1).userExists = 2
ret = s.Serialize(b)
ret = "{" & Chr(34) & "ReturnData" & Chr(34) & ":" & ret & "}"
У меня могут быть или не быть данные для ReturnData и SetValue (как минимум один или оба). Я пытаюсь позволить сериализатору обрабатывать большую часть форматирования, не проверяя наличие пустых разделов и массивов с одним элементом. Какие-либо предложения?
1 ответ
Как насчет чего-то подобного (я только закодировал SetValue, вы можете легко добавить ReturnData, используя ту же технику.
По сути, просто оберните два ваших массива во внешний объект (я назвал свой метод MethodCall, потому что так он выглядит).
Imports System.Runtime.Serialization
Imports System.Web.script.serialization
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Debug.Print(TestSerial3())
End Sub
Public Function TestSerial3() As String
Dim s As New JavaScriptSerializer()
Dim ret As String
Dim r = New MethodCall
r.SetValue(0) = New SetValue
With r.SetValue(0)
.id = "ctl00_number_1"
.value = "Test1"
End With
r.SetValue(0) = New SetValue
With r.SetValue(0)
.id = "ctl100_number_2"
.value = "Test2"
End With
ret = s.Serialize(r)
Return ret
End Function
End Class
<Serializable()> _
Public Class ReturnData
Public id As String
Public value As String
Public userExists As Integer
End Class
<Serializable()> _
Public Class SetValue
Public id As String
Public value As String
End Class
<Serializable()> _
Public Class MethodCall
Public SetValue(1) As SetValue
Public returnData(2) As ReturnData
End Class
Похожие вопросы
Связанные вопросы
Новые вопросы
vb.net
Visual Basic.NET (VB.NET) - это мультипарадигмальный, управляемый, типобезопасный, объектно-ориентированный язык компьютерного программирования. Наряду с C # и F # это один из основных языков, нацеленных на .NET Framework. VB.NET можно рассматривать как эволюцию Microsoft Visual Basic 6 (VB6), но реализованную в Microsoft .NET Framework. НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов VB6, VBA или VBScript.