【发布时间】:2021-01-29 12:10:15
【问题描述】:
在我的 .Net Core 3.1 Web 应用程序中,我有一个后端和前端共享的类,如下所示
public class Order
{
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public DateTime OrderTime { get; set; }
public int UserId { get; set; }
public int Vat { get; set; }
[NotMapped]
public Dictionary<string, int> Products { get; set; }
public int Discount { get; set; }
public float ShippingPrice { get; set; }
public bool Shipped { get; set; }
public bool Cancelled { get; set; }
public string CancelReason { get; set; }
public Order()
{
}
}
在前端,我使用 HttpClient 从 REST API 获取订单列表。
httpClient 接收到的 Json 如下所示:
[
{
"id": 1,
"orderTime": "2021-01-28T14:55:03.077",
"userId": 0,
"vat": 0,
"products": null,
"discount": 0,
"shippingPrice": 0,
"shipped": true,
"cancelled": true,
"cancelReason": "string"
},
{
"id": 2,
"orderTime": "2021-01-28T14:55:03.077",
"userId": 2,
"vat": 0,
"products": null,
"discount": 10,
"shippingPrice": 0,
"shipped": false,
"cancelled": false,
"cancelReason": null
}
]
对于反序列化,我使用的是 JsonSerializer:
var returnOrders = await JsonSerializer.DeserializeAsync<List<Order>>(await response.Content.ReadAsStreamAsync());
从中我确实得到了 List 上正确数量的对象,但它们都具有 0 或 null 等值。 我做错了什么?
在我使用 ReadAsAsync() 之前,它运行良好,但在 .Net core 3 中已弃用
await response.Content.ReadAsAsync<List<Object>>();
【问题讨论】:
-
您是否检查过您触发的查询
Order.Products是否有价值?我的意思是您的查询Includes 是否映射了那里的实体?您的数据是否正确,我的意思是那里应该有数据? -
数据库中的产品为空,这样做很好。但是例如所有对象的ID都是0,而Json中不是这样
-
因此,如果您希望在数据库中没有数据时
Order.Products的默认值与 null 不同,那么我将在构造函数中启动Order.Products字段。结果,它将是一个具有零元素的列表。这是你要找的吗? -
我想你可能误解了我的问题。我从反序列化中得到的对象与 Json 和 Db 中的对象不同。它适用于对象或订单,而不是专门的 Order.Products
-
您需要确保属性的拼写与 json 文件中的拼写相同。如果你想使用不同的拼写,那么你必须使用属性来告诉json反序列化器哪个属性是json中的哪个字段
标签: c# asp.net-core asp.net-core-3.1 json-deserialization