2012-08-01 84 views
0

我已经jQuery的通过HTML表循环,并把它变成一个对象,然后用JSON.stringify转换的JavaScript对象JSON,见下文类不匹配高达JSON字符串

{ 
"0":{"name":"fdgd","surname":"ssdt"}, 
"1":{"name":"fdsf","surname":"vn"}, 
"2":{"name":"dfsb","surname":"mry"}, 
"3":{"name":"hsdsdfry","surname":"smh"} 
} 

我的问题是使用JSON JSON.net和班组长IM正在试图匹配它的JSON转换成我tableT对象

它的Jsonconvert我得到空的对象后,可以请你告诉我,什么是错我的班组长。我使用vb.net和.net 2.所以我想我的问题是我如何匹配我的tableT类到我的json字符串?感谢您的帮助。

Dim tableOBJ As tableT = JsonConvert.DeserializeObject(Of tableT)(myJSON) 


Public Class tableT 

    Private _allRows As List(Of Rows) 

    Property AllRows As List(Of Rows) 
     Get 
      Return _allRows 
     End Get 
     Set(ByVal value As List(Of Rows)) 
      _allRows = value 
     End Set 
    End Property 

End Class 

Public Class Rows 

    Private _name As String 
    Private _surname As String 

    Property name As String 
     Get 
      Return _name 
     End Get 
     Set(ByVal value As String) 
      _name = value 
     End Set 
    End Property 

    Property surname As String 
     Get 
      Return _surname 
     End Get 
     Set(ByVal value As String) 
      _surname = value 
     End Set 
    End Property 

End Class 

回答

2

没有测试它,它看来,

JsonConvert.DeserializeObject(Of tableT)(myJSON) 

确实应该更多的东西一样

JsonConvert.DeserializeObject(Of List(Of Rows))(myJSON) 

因为没有任何方式JsonConvert知道你想要的行在AllRows对象中。

所以,你的代码看起来更象:

Dim tableOBJ As New tableT 
tableOBJ.AllRows = JsonConvert.DeserializeObject(Of List(Of Rows))(myJSON) 

**编辑**

测试之后,我才能够得到这个通过修改JSON字符串看起来更上班就像我所理解的Json数组应该看起来一样。

具体来说,如果我改变了数组的样子:

{"AllRows": [ 
{"name":"fdgd","surname":"ssdt"}, 
{"name":"fdsf","surname":"vn"}, 
{"name":"dfsb","surname":"mry"}, 
{"name":"hsdsdfry","surname":"smh"} 
]} 

然后你原来的代码工作正常。

你原来的Json正在做的是期望在类中有属性,称为0,1,2和3类型的行,这是不可能的与VB是,我敢肯定,不是你在找什么去完成。

您可以通过添加属性零,一,二验证这一点,和类型行的三到平板电脑:

Public Class tableT 

    Public Zero As New Rows 
    Public One As New Rows 
    Public Two As New Rows 
    Public Three As New Rows 

改变你的JSON来:

{ 
"Zero":{"name":"fdgd","surname":"ssdt"}, 
"One":{"name":"fdsf","surname":"vn"}, 
"Two":{"name":"dfsb","surname":"mry"}, 
"Three":{"name":"hsdsdfry","surname":"smh"} 
} 

和反序列化使用原创课。你会看到新的属性被填充了你的json字符串的内容。

+0

我可以寄给你我的测试项目吗?请?谢谢你的帮助 – 2012-08-01 18:57:33

+0

不能反序列化当前的JSON对象(例如{“name”:“value”})到类型'System.Collections.Generic.List'1 [Rows]'中,因为类型需要一个JSON数组(例如[1 ,2,3])来正确地反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化的类型,以使其为正常的.NET类型(例如,不是像整数这样的基本类型,也不是集合类型像一个数组或列表)可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中,以强制它从JSON对象反序列化。 路径'0',第1行,第5位。 – 2012-08-01 19:02:24