将对象json转换为对象vb .net

时间:2015-04-16 08:03:38

标签: json vb.net

您好我需要将此对象转换为vb。

{"user": 
 [
  {"name":"CompanyName"},
  {"password":"CompanyPassword"},
  {"email":"mail@company.com"},
  {"name":"UserName"},
  {"email":"user@mail.com"}
 ]
}

我试着用这个:

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

但是当我去序列化在vb中创建的json对象时 我看到没有大括号。 同样在vb中,我无法添加{"名称":"用户名"},{"电子邮件":" user@mail.com&# 34;} 因为他们已经在场了。

1 个答案:

答案 0 :(得分:0)

看看这个:JSON Serialization in .Net

您需要添加System.Runtime.Serialization作为项目的引用,然后在代码中设置序列化程序对象。您还需要标记,您的类中的哪些字段与您的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中重命名字段名,那么它就可以了。