2015-04-16 3 views
0

Здравствуйте, мне нужно преобразовать этот объект в vb.конвертировать объект json в объект vb .net

{"user": 
[ 
    {"name":"CompanyName"}, 
    {"password":"CompanyPassword"}, 
    {"email":"[email protected]"}, 
    {"name":"UserName"}, 
    {"email":"[email protected]"} 
] 
} 

Я пытаюсь с этим:

Public Class InfoObjUser 
Public Property name As String 
Public Property password As String 
Public Property email As String 
End Class 

Public Class ObjUser 
Public Property user As New List(Of InfoObjUser) 
End Class 

, но когда я иду в сериализовать объект JSON создан в VB Я вижу, что нет фигурных скобок. Также в vb я не могу добавить {"name": "UserName"}, {"email": "[email protected]"} , потому что они уже присутствуют.

+2

показать код, который вы пытаетесь сериализовать, также включать код, который вы пытаетесь добавить имя и адрес электронной почты. отредактируйте этот вопрос и включите образцы кода. – Damith

+0

Взгляните на [json.net] (http://www.newtonsoft.com/json) –

+0

Этот класс не совсем соответствует строке J. Один элемент электронной почты не может содержать 2 разных значения электронной почты. Без кода, показывающего, что вы делаете и как, трудно помочь – Plutonix

ответ

0

Посмотрите на следующее: JSON Serialization in .Net.

Вам необходимо добавить System.Runtime.Serialization в качестве ссылки на ваш проект, а затем настроить объект serializer в вашем коде. Вам также нужно пометить, какие поля в вашем классе соответствуют вашему JSON-коду.

Это будет ваша установка класс:

<DataContract> 
Public Class InfoObjUser 
<DataMember(Name:="Name")> 
Public Property name As String 
<DataMember(Name:="Password")> 
Public Property password As String 
<DataMember(Name:="Email")> 
Public Property email As String 
End Class 

<DataContract> 
Public Class ObjUser 
<DataMember> 
Public Property user As New List(Of InfoObjUser) 
End Class 

И класс читатель Json для этого будет выглядеть следующим образом:

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

Public Class JsonReader 

    Public Shared Function FromString(Of T)(ByVal input As String) As T 
    Dim serializer As New DataContractJsonSerializer(GetType(T)) 
    Dim memStream As New MemoryStream() 

    Dim sw As New StreamWriter(memStream) 
    sw.Write(input) 
    sw.Flush() 

    memStream.Position = 0 

    Dim returnObj As T = CType(serializer.ReadObject(memStream), T) 
    Return returnObj 
    End Function 

End Class 

И, наконец, вы можете назвать этот класс так:

Dim jsonString ' = ...Input string here 
Dim user As ObjUser = JsonReader.FromString(Of ObjUser)(jsonString) 

Однако невозможно назвать имя для двух разных объектов данных, поскольку сериализатор не знал, где их сопоставить, поскольку это имя объекта.

Я не знаю, как эта структура данных уже установлена, но если это возможно, я предлагаю вам изменить дублированные имена, поскольку при этом программно не происходит никакого реального сопоставления.

<DataMember(Name:="UserName")> 
Public Property username As String 
<DataMember(Name:="UserEmail")> 
Public Property usermail As String 

Если бы вы добавить что-то подобное для вашей модели данных класса и переименовать имена полей в вашем Json, то он будет работать.

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