我已经从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();