序列化 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]);
谢谢,
理查德.
尝试使用以下内容序列化 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]);
谢谢, 理查德.