Reputation: 93
I am exploring Microsoft Entity Framework Core 6.0.3 with the .NET 6 framework.
My target database is PostgreSQL - and I'm using Npgsql.EntityFrameworkCore.PostgreSQL
(6.0.3).
I have two classes
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; }
}
I wrote following code to retrieve data from the Employee
table:
List<Employee> list = db.Employees.Where(x => x.Id == "1234").ToList();
I able to see list[0].Id
, list[0].Name
populated as expected. I also able to see list[0].Data[0]
available.
Problem is I am NOT able to see list[0].Data[0].familyMembers
and list[0].Data[0].phoneNumbers
.
Problem is, in PostgreSQL database, familyMembers
column is actually Family Members
and phoneNumbers
is Phone Numbers
.
Data
column of Employee
table is set to jsonb
column and has the following data:
[
{
"Family Members": ["Mother", "Father", "Wife"],
"Phone Numbers": ["9998887765", "1123444444"]
}
]
My question is: how do I map Family Members
property of the jsonb
column into familyMembers
array of my C# class?
With my investigation, if I use familyMembers
property in JSON in database, it works
[
{
"familyMembers": ["Mother", "Father", "Wife"],
"phoneNumbers": ["9998887765", "1123444444"]
}
]
Using JsonProperty("Family Members")
attribute however didn't work.
public class ExtendedData
{
JsonProperty("Family Members")
public List<string> familyMembers { get; set; }
...
}
Not that - even if it doesn't make sense in this example, Data
property has to be collection (List type) and familyMembers
and phoneNumbers
is a list of strings.
Thanks, Atul
Upvotes: 1
Views: 4750
Reputation: 93
I got hint from https://www.npgsql.org/efcore/mapping/json.html?tabs=fluent-api%2Cpoco
I was focusing on JsonProperty but looks like another attribute JsonPropertyName worked.
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; }
}
Upvotes: 0