簡體   English   中英

PostgreSQL JSONB 序列化/反序列化與 Entity Framework Core 6 和 .NET Core 6

[英]PostgreSQL JSONB serialization/de-serialization with Entity Framework Core 6 and .NET Core 6

我正在使用 .NET 6 框架探索 Microsoft Entity Framework Core 6.0.3。

我的目標數據庫是 PostgreSQL - 我正在使用Npgsql.EntityFrameworkCore.PostgreSQL (6.0.3)。

我有兩節課

public class ExtendedData
{
      public List<string> familyMembers { get; set; }
      public List<string> phoneNumbers { get; set; }
}

public class Employee
{ 
      public String Id { get; set; }
      public String Name { get; set; }
      public List<ExtendedData> Data { get; set; }
}

我編寫了以下代碼來從Employee表中檢索數據:

List<Employee> list = db.Employees.Where(x => x.Id == "1234").ToList();

我能夠看到list[0].Idlist[0].Name按預期填充。 我還可以看到list[0].Data[0]可用。

問題是我看不到list[0].Data[0].familyMemberslist[0].Data[0].phoneNumbers

問題是,在 PostgreSQL 數據庫中, familyMembers列實際上是Family MembersphoneNumbersPhone Numbers

Employee表的Data列設置為jsonb列,數據如下:

[
    { 
      "Family Members": ["Mother", "Father", "Wife"], 
      "Phone Numbers": ["9998887765", "1123444444"]
    }
]

我的問題是:如何將jsonb列的 map Family Members屬性放入我的 C# class 的familyMembers數組中?

根據我的調查,如果我在數據庫中使用familyMembers中的 familyMembers 屬性,它就可以工作

[
    {
        "familyMembers": ["Mother", "Father", "Wife"], 
        "phoneNumbers": ["9998887765", "1123444444"]
    }
]

但是,使用JsonProperty("Family Members")屬性不起作用。

public class ExtendedData
{ 
      JsonProperty("Family Members") 
      public List<string> familyMembers { get; set; }
...
}

不是這樣——即使在這個例子中它沒有意義, Data屬性必須是集合(列表類型)並且familyMembersphoneNumbers是一個字符串列表。

謝謝,阿圖爾

我從https://www.npgsql.org/efcore/mapping/json.html?tabs=fluent-api%2Cpoco得到提示

我專注於JsonProperty ,但看起來另一個屬性JsonPropertyName起作用了。

public class ExtendedData
{
[System.Text.Json.Serialization.JsonPropertyName("Family Members")]
      public List<string> familyMembers { get; set; }

[System.Text.Json.Serialization.JsonPropertyName("Phone Numbers")]
      public List<string> phoneNumbers { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM