序列化 json - 无法将类型 'XXX' 的对象转换为类型 'System.Collections.IEnumerable'

Serialize json - Unable to cast object of type 'XXX' to type 'System.Collections.IEnumerable'

尝试使用以下内容序列化 json:

<JsonArray>
Public Class NumbersItem
    Public Sub New(objTime As Long, objSolValue As Long, objUsageValue As Long)
        DetectionTime = objTime
        SolValue = objSolValue
        UsageValue = objUsageValue
    End Sub
    Public ReadOnly Property DetectionTime As Long
    Public ReadOnly Property SolValue As Long
    Public ReadOnly Property UsageValue As Long
End Class

获取数据并转换:

'Get Solar Gen
Dim SolarResultsfound = VATWebClient.UploadString("https://XXXXXX.org/feed/data.json?id=" + SolarID + "&start=" + UNStartTime.ToString + "&end=" + UNEndTime.ToString + "&interval=1300", "")

'Get Usage
Dim UsageResultsfound = VATWebClient.UploadString("https://xxxxxx.org/feed/data.json?id=" + UsageID + "&start=" + UNStartTime.ToString + "&end=" + UNEndTime.ToString + "&interval=1300", "")

编辑:我取回的数据在两个请求中均采用以下格式,每个请求最多 3k 组。

[[1579617389000,132],[1579617399000,136],[1579617409000,139],[1579617419000,137]]

编辑:然后我想将两者结合起来(将来会有更多)发送到 google 图表。我从第一个结果中获取 unix 时间(第一列)和值(第二列),从第二个结果中仅获取值列。

'Create an list from json results
Dim numbers As New List(Of NumbersItem)()
Dim jsonArrays = JArray.Parse(SolarResultsfound)
Dim jsonUsageArrays = JArray.Parse(UsageResultsfound)
For Each array As JArray In jsonArrays.Children()
    For Each usage As JArray In jsonUsageArrays
          numbers.Add(New NumbersItem(CType(array.First, Long), CType(array.Last, Long), CType(usage.Last, Long)))
    Next
Next

然后我尝试使用以下序列化。

Dim jsonTxt As String = Newtonsoft.Json.JsonConvert.SerializeObject(numbers)

并得到如下错误

Unable to cast object of type 'xxxxxx.NumbersItem' to type 'System.Collections.IEnumerable'.

我感觉这一定是我调用序列化程序的方式,但我找不到正确的语法。

抱歉,我似乎已经回答了我自己的问题。添加更多解释后,我发现自己在思考是否可以在同一个 google 图表中组合多个数据集,是的!

生成了如下两个数据表。

//setup DT for solar production
var dt1 = new google.visualization.DataTable();
dt1.addColumn('number', 'Date');
dt1.addColumn('number', 'Solar (watts)');
dt1.addRows(@GenResults);

//setup DT for usage
var dt2 = new google.visualization.DataTable();
dt2.addColumn('number', 'Date');
dt2.addColumn('number', 'Usage (watts)');
dt2.addRows(@UseResults);

然后我将两个数据表合并到一个联合视图中,它起作用了。

var data = google.visualization.data.join(dt1, dt2, 'full', [[0, 0]], [1], [1]);

谢谢, 理查德.