如何将 jsonb 字段中的字段名称映射到对象中的另一个名称?
How to map fields name in jsonb field to another name in object?
我使用 Postgres,我的数据库 table 看起来像那样
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; }
}
我使用 entity framework + npgsql 到 read/write 到 DB。不幸的是,当 npgsql 从数据库读取时,它不会填充 Baz(因为命名约定不匹配)
a) 我尝试使用 [Column("baz")]。然而,它被忽略了(可能因为它不是真正的列,而是一个 json 标签)
b) 我正在考虑将 属性 命名为“baz”,但它只是将问题转移到代码中的另一个地方(需要进行另一个映射的地方)。
因此,我正在查看我是否错过了某种不区分大小写或将 属性 映射到来自 json.
的名称的方法
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 answer
另外值得一提的是,第二种解决方法不会影响查询生成。
我使用 Postgres,我的数据库 table 看起来像那样
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; }
}
我使用 entity framework + npgsql 到 read/write 到 DB。不幸的是,当 npgsql 从数据库读取时,它不会填充 Baz(因为命名约定不匹配)
a) 我尝试使用 [Column("baz")]。然而,它被忽略了(可能因为它不是真正的列,而是一个 json 标签)
b) 我正在考虑将 属性 命名为“baz”,但它只是将问题转移到代码中的另一个地方(需要进行另一个映射的地方)。
因此,我正在查看我是否错过了某种不区分大小写或将 属性 映射到来自 json.
的名称的方法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 answer
另外值得一提的是,第二种解决方法不会影响查询生成。