2014-12-19 50 views
1

我有一些JSON从一个Web服务来是这样的:JSON字符串VB.net对象与嵌套列表

{ 
    "disclaimer": "Exchange r..", 
    "license": "Data sourced from variou..", 
    "timestamp": 1262365200, 
    "base": "USD", 
    "rates": { 
    "AED": 3.67275, 
    "AFN": 48.550089, 
    "ALL": 96.435505, 
    "AMD": 377.894224, 
    "ANG": 1.791, 
    "AOA": 89.174867, 
    "ARS": 3.79928 
    } 
} 

我已经建立了一个小班级接受它。

Class currencyValues 

     Class ratePairs 
      Property currencyCode 
      Property currencyValue 
     End Class 

     Property disclaimer 
     Property license 
     Property timestamp 
     Property base 
     Property rates As New List(Of ratePairs) 

    End Class 

当我运行代码接受JSON到类中它需要顶级属性,但没有填充ratePairs的列表。

Dim js As New System.Web.Script.Serialization.JavaScriptSerializer() 
    Dim recs = js.Deserialize(Of currencyValues)(curRecordJSON) 

list recs.Rates的计数为零。

我在做什么错?

+0

json中的'rates'不是一个数组,因此不能被反序列化为一个列表。它实际上是一个对象,具有诸如'AED'和'AFN'等属性。您可以将它反序列化为一个'Dictionary(Of String,Double)' – 2014-12-19 11:30:31

+0

@JamesThorpe就是这样!哦,你很好。请作为答复发布,我会接受。 – bendecko 2014-12-19 12:14:36

回答

1

原始json中的rates属性不是数组,因此无法反序列化为列表。

它实际上是一个对象,它如AEDAFN等,你都能够deserialise它作为Dictionary(Of String, Double),或者性质不会改变,你可以建立一个类来保存它的属性:

Class Rates 
    Property AED 
    Property AFN 
    'etc 
End Class 
+0

这些是货币,我猜他们可能会更多或更少(例如欧元合并新成员国)并随时间而改变,所以词典解决方案对我来说是最好的。谢谢。 – bendecko 2014-12-19 12:32:19