2015-02-11 31 views
0

我正在使用json.net将json字符串反序列化为分类对象以用于vb.net控制台应用程序。我已经开始为这些领域的每个领域设置课程,但是我对如何设置sta课程感到有点困惑,因为它似乎是一个列表数组?vb.net在列表中的json + deserialise列表

我希望你能提供任何帮助,计划是使用Json.JsonConvert.DeserializeObject将字符串反序列化到类中。我会错误处理一些字符串没有任何笔画,只是时间。

{"time":1423625141,"id":35609390,"strokes":[{"time":1423625137180,"lat":-34.4798 
08,"lon":147.249959,"alt":0,"cur":0,"dev":6553,"inv":0,"sta":[9,[812,849,919,118 
5,874,1248,984,1276,875]],"id":35609386},{"time":1423625137250,"lat":-34.542924, 
"lon":147.299573,"alt":0,"cur":0,"dev":7505,"inv":0,"sta":[9,[812,849,877,919,11 
85,874,1248,984,1276,875]],"id":35609388},{"time":1423625137552,"lat":-34.514597 
,"lon":147.284943,"alt":0,"cur":0,"dev":6894,"inv":0,"sta":[7,[849,919,1185,1248 
,984,1276,1016,875]],"id":35609389}]} 

我的类如下:

Class Data 
    Public time As Integer 
    Public id As Integer 
    Public strokes As List(Of Strokes) 
End Class 

Class Strokes 
    Public time As Integer 
    Public lat As Decimal 
    Public lon As Decimal 
    Public alt As Integer 
    Public cur As Integer 
    Public dev As Integer 
    Public sta As New sta 
End Class 

Class sta 
    Public sta As List(Of Integer) 
End Class 

回答

1

即使您已通过JSON发送一个复杂的对象DefaultModelBinder应该把它捡起来,并将其映射到模型。有几件事情需要你确定。

首先是你如何发送你的JSON。内容类型应明确设置为“application/json”,如果使用JQuery,则需要使用$ ajax方法(而不是$ post),并确保字符串化以正确格式化数据。我还使用Fiddler来捕捉JSON并通过在线验证器运行它,以确保它正确传递格式。

 $.ajax({ 
     type: "POST", 
     url: /MyJsonActionController', 
     contentType: 'application/json; charset=utf-8', 
     data: Json.stringify(MyFormData) 
     } 

其次,你的动作控制器应该简单地说明该模型映射到在构造函数例:

Public Function MyJsonActionController(ByVal d as Data) JsonResult 
     'ModelBinder should do all of the work and then you can use the incoming model to do what you'd like 
     SaveToDatabase(d) 
     return Json(true) 
    End Function 

而且一定要根据模型值的名字来命名的表单字段。这应该做到这一点。

如果遇到任何问题,这是一篇很好的文章,非常清楚地解释ModelBinding是如何工作的。您将看到,根据这篇文章,ModelBinder将首先读取所有基本类型以映射模型,如果有更复杂的类型,它将递归地再次传递并挑选它们并映射它们。如果JSON呈现正确,DefaultModelBinder实际上可以处理复杂/嵌套的模型映射。

https://msdn.microsoft.com/en-us/magazine/hh781022.aspx

+0

谢谢你的回应,最感激! – user1829564 2015-02-11 22:40:24