如何使用实体框架对JSON进行反序列化并保存到数据库



我已经从API中提取了一些JSON数据,现在我正在尝试将其反序列化为对象,并将这些对象保存到使用实体框架创建的SQL Server数据库中。下面的代码不允许我将数据添加到Customers表中,因为数据库不接受列表。

string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Root>>(apiResponse);
db.Customers.AddRange(data);
db.SaveChanges();

此外,以下代码也不起作用。我认为这可能与使用Customers的列表而不是<Root>的列表有关。但我不想在我的数据库中创建Root表,我宁愿只有一个Customers表而没有Root表。

List<Customers> customers = new List<Customers>();
string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<Customers>(apiResponse);
customers.Add(data);
db.Customers.AddRange(data);
db.SaveChanges();

Json

[
{
"id": "1asda3",
"name": "Customer1"
},
{
"id": "asda2",
"name": "Customer2"
},
{
"id": "gfh234",
"name": "Customer3"
},
{
"id": "fdg312",
"name": "Customer4"
}
]

型号:

public class Root
{
public List<Customers> Customers { get; set; }
}
public class Customers
{
[JsonProperty("id")]
public string id { get; set; }
[JsonProperty("name")]
public string name { get; set; }
}

DbContext:

public DbSet<Customers> Customers { get; set; }
public DbSet<Root> Root { get; set; }

编辑

我通过简单地从我的模型中删除公共类Root来解决我的问题。通过使用:

string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Customers>>(apiResponse);
db.Customers.AddRange(data);
db.SaveChanges();

您有一个json对象,其中包含一个来自API的json数组,但您直接将其解析为json数组我想这可能会让惊叹

string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<Root>(apiResponse);
db.Customers.AddRange(data.Customers);
db.SaveChanges();

最新更新