我有一些遥测数据作为JSON存储在文本字段中。我正在尝试对POCO进行反向工程,以无缝地提取和呈现数据,而无需进行任何后处理ForEach循环。
当我尝试手动解析数据字段中的JSON字符串时,它可以正常工作。当我通过ORMLite选择时,它返回默认对象。我错过了什么?
作品
string x = "{\"alive\":true,\"paperStatus\":\"0:NoIssue\"}";
var telemetry = JsonSerializer.DeserializeFromString<KioskTelemetryData>(x);
不填充数据字段
var exp = Db.From<KioskTelemetryLog>()
.Where(q => q.Identifier == request.Identifier)
.OrderByDescending(q => q.Timestamp);
var data = Db.Select(exp);
以下是数据记录的内容:
Id Identifier IsCurrent RedemptionCenterId Timestamp Status Data
1 XXX 0 NULL 2015-11-24 11:10:53.527 1 {"alive":true,"paperStatus":"1:LowPaper"}
2 XXX 0 NULL 2015-12-01 12:16:56.653 0 {"alive":true,"paperStatus":"0:NoIssue"}
1 XXX 1 NULL 2015-12-01 18:32:11.337 2 {"alive":false}
以下是POCO:
[Alias("TelemetryLog")]
public class KioskTelemetryLog
{
public long Id { get; set; }
public string Identifier { get; set; }
public bool IsCurrent { get; set; }
public int? RedemptionCenterId { get; set; }
public DateTime Timestamp { get; set; }
// 0 = okay, 1 = warning, 2 = error
public sbyte Status { get; set; }
public KioskTelemetryData Data { get; set; }
}
public class KioskTelemetryData
{
public bool Alive { get; set; }
public string PaperStatus { get; set; }
}
答案 0 :(得分:2)
OrmLite的默认复杂类型序列化程序是JSV Format(使用JSON的PostgreSQL除外)。 OrmLite支持pluggable text serializers,例如您可以使用以下命令更改SQL Server以使用JSON序列化复杂类型:
!(condition1 & condition2)
如果它没有正确序列化,就像序列化错误一样,您可以尝试enable logging获取有关错误的更多信息,例如:
SqlServerDialect.Provider.StringSerializer = new JsonStringSerializer();