我有一些遥测数据以 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; }
}
最佳答案
OrmLite 的默认复杂类型序列化器是 JSV Format (使用 JSON 的 PostgreSQL 除外)。 OrmLite 确实支持 pluggable text serializers ,例如您可以将 SQL Server 更改为使用 JSON 来序列化复杂类型:
SqlServerDialect.Provider.StringSerializer = new JsonStringSerializer();
如果序列化不正确,就像序列化错误,您可以尝试 enable logging有关错误的更多信息,例如:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:true);
关于json - ServiceStack ORMLite 未反序列化存储在数据库文本字段中的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186656/