我使用 Postgres,我有一個看起來像這樣的表的資料庫
column - foo
type - jsonb
value - {"baz" : "test" }
請注意,“baz”不是大寫的(這個 json 檔案幾乎是在駝峰式中)。
我有 C# 中的代碼(所以命名約定是 Pascal Case)
public class Foo
{
[Column(TypeName = "jsonb")]
public BarData Bar { get; set; }
}
public class BarData
{
// ??? What kind of annotation to put here
public String Baz { get; set; }
}
我使用物體框架 npgsql 來讀/寫資料庫。不幸的是,當 npgsql 從 DB 讀取時,它不會填充 Baz(因為命名約定不匹配)
a) 我嘗試使用 [Column("baz")]。但是,它被忽略了(可能是因為它實際上不是一個列,而是一個 json 標記)
b)我正在考慮將屬性命名為“baz”,但它只是將問題轉移到代碼中的另一個位置(需要進行另一個映射)。
結果,我正在查看是否錯過了某種不區分大小寫的方法或將屬性映射到來自 json 的名稱。
uj5u.com熱心網友回復:
npgsql 驅動程式System.Text.Json用于序列化json值。所以你只需要用屬性注釋你的JsonPropertyName屬性。
public class BarData
{
[JsonPropertyName("baz")]
public String Baz { get; set; }
}
如果您唯一關心的是外殼,您可以使用 JsonSerializerSettings.PropertyNamingPolicy
這是從 6.0 版本開始更改序列化選項的方式:
var options = new JsonSerializerOptions
{
// Customize based on needs...
};
NpgsqlConnection.GlobalTypeMapper.AddTypeResolverFactory(new JsonOverrideTypeHandlerResolverFactory(options));
歸功于這個 github答案
還值得一提的是,第二種解決方法不會影響查詢生成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412745.html
標籤:
