2
我有一些遙測數據作爲JSON存儲在文本字段中。我試圖對POCO進行逆向工程,無縫地提取和呈現數據,而無需執行任何後處理ForEach循環。ServiceStack ORMLite不反序列化存儲在DB文本字段中的JSON
當我嘗試手動解析數據字段中的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}
這裏是波蘇斯:
[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; }
}
Ung - 完全錯過了[docs here](https://github.com/ServiceStack/ServiceStack.OrmLite#pluggable-complex-type-serializers)。是否有可能像使用JsonSerializer一樣在查詢的基礎上重寫行爲? – jklemmack
@jklemmack不,你可以暫時覆蓋它並在最後的語句中恢復它,但這不是線程安全的。另一種方法是將屬性聲明爲字符串,然後像'KioskTelemetryData GetData()'那樣返回反序列化的版本。 – mythz
啊 - 我真的很喜歡使用額外的方法來進行反序列化,因爲相同的遙測表保存了幾種不同類別設備的數據。我可能會將其作爲基於類型的只讀屬性來實現。這讓我可以將整個POCO重新轉換爲JSON並將其提供給儀表板網站。 – jklemmack