Прямо сейчас я использую Newtonsoft.json
с моим OdbcConnection
и вручную создаю объекты для каждого выполняемого запроса. Это выглядит примерно так:Динамически создавать объекты JSON для результатов datareader, независимо от того, как они выглядят?
Классы:
public class payload
{
public string id;
public string type;
public DateTime timestmap;
public object data;
}
public class resultPhrLastTime
{
public string facilityId;
public string type;
public string time;
}
Код:
payload result = new payload();
var resultList = new List<resultPhrLastTime>();
result.id = "someid";
//connection stuff
while (reader.Read())
{
var t = new resultPhrLastTime();
//if (verbose) log(reader[0].ToString());
t.facilityId = reader[0].ToString();
t.type = reader[1].ToString();
t.time = reader[2].ToString();
resultList.Add(t);
}
result.data = resultList;
result.timestmap = DateTime.Now;
result.type = "complex";
string output = JsonConvert.SerializeObject(result);
Это прекрасно работает, но каждый раз, когда я добавить новый запрос в мое приложение (из которых будет много) Я должен создать новый пользовательский класс, если данные выглядят иначе.
Я хотел бы найти способ, чтобы преобразовать весь reader
объект JSON, независимо от формата, так что она может выглядеть следующим образом:
SQL Результат:
2814814
JSON:
result: { timestamp: 2016-09-10 8:15, data: { '2814814' } }
или это может выглядеть следующим образом:
SQL Результат:
Apple | 59 Orange | 17
JSON:
result: { timestamp: 2016-09-10 8:15, data: {[ 'Apple':'59', 'Orange':'17' ]} }
Или может быть 5 колонок ...
Есть ли способ сделать это?
Вы можете создать функцию, которая создает Json-строку из вашего набора результатов, если она такая же простая, как и те, что указаны выше. Json - это просто форматированная строка. – ekenman