У меня проблемы с сериализацией графа объектов с помощью NewtonSoft JsonConvert.Dapper может работать двумя способами: метод Query(string sql[, object args])
может возвращать IEnumerable<dynamic>
или универсальный метод Query<T>(string sql[, object args])
может возвращать IEnumerable<T>
Он работает, когда я не типарезультат:
stringifiedDynamicData
[{"Record_Key":2,"Factory_Key":7,"EnteredAt":"2018-11-20T09:03:03.374",...}]
Когда я указываю тип для результата, результаты выглядят следующим образом:
stringifiedTypedData
[{}]
Вот код, приведший выше.
IDbConnection syb = new OdbcConnection(connectionstring);
var sql = System.IO.File.ReadAllText("./powerbi.sybase");
var typedData = syb.Query<Status>(sql);
var stringifiedTypedData = JsonConvert.SerializeObject(typedData);
Console.WriteLine("stringifiedTypedData");
Console.WriteLine(stringifiedTypedData);
var dynamicData = syb.Query(sql);
var stringifiedDynamicData = JsonConvert.SerializeObject(dynamicData);
Console.WriteLine("stringifiedDynamicData");
Console.WriteLine(stringifiedDynamicData);
Проверка отладки переменной typedData выявляет коллекцию Status
объектов с одним элементом, как и ожидалось.Поля имеют ожидаемые значения, поэтому было немного удивительно, когда JsonConvert.Deserialize(typedData)
вернул [{}]
Добавление этого значения
var foo = new {
A = "wibble", B = 6
};
IEnumerable<object> bar = from x in new object[] { foo } select x;
var quux = JsonConvert.SerializeObject(bar);
Console.WriteLine("quux");
Console.WriteLine(quux);
дает ожидаемый результат
quux
[{"A":"wibble","B":6}]
, что подразумевает проблему с данными.так что это не какая-то проблема конфигурации.
Класс Status
имеет эту форму.
public class Status
{
float AdtechAmt { get; set; } = -1;
float AssemblyError { get; set; } = -1;
string CutToFinish_Avg { get; set; } = "-1";
...
}
Я только что добавил значения по умолчанию, чтобы увидеть, имеет ли это значение(нет).
Я думаю, что слишком долго использую Typescript, меня просто поразило, что эти свойства не являются общедоступными.