Сериализация json - Невозможно привести объект типа 'XXX' к типу 'System.Collections.IEnumerable'. - PullRequest
0 голосов
/ 25 января 2020

Попытка сериализации 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", "")

Редактировать: данные, которые я получаю, имеют следующий формат в оба запроса, до 3 тыс. наборов каждый.

[[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)

И получить следующую ошибку

Невозможно привести объект типа 'xxxxxx.NumbersItem' к типу 'System.Collections.IEnumerable'.

У меня такое чувство, что я должен вызывать сериализатор, но не могу найти правильный синтаксис.

1 Ответ

0 голосов
/ 26 января 2020

Извините, я, кажется, ответил на свой вопрос. Добавив больше объяснений, я подумал, можно ли объединить несколько наборов данных в одну и ту же диаграмму 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]);

Спасибо, Ричард.

...