我有兩個的ViewModels(產品和部分):JSON序列化需要很長的時間
public class ProductViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
public IEnumerable<PartViewModel> Parts { get; set; }
}
public class PartViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
我運行一個EF核心查詢,返回1727級的產品,每個產品至少1個部分。對這些1回的一個例子是序列化到JSON這樣:
[
{
"Id":8761,
"Name":"Product Name 1",
"Description":"This is a product",
"IsActive":true,
"Parts":[
{
"Id":103767,
"Name":"Name 1"
"IsActive":true
},
{
"Id":156436,
"Name":"Name 2",
"IsActive":true
},
{
"Id":109436,
"Name":"Name 3",
"IsActive":true
}
]
}
]
現在,這個工程很好地詢問我在那裏。取(10),雖然看似緩慢,但是當我嘗試和序列化1727記錄,它陷入泥潭,五分鐘的等待甚至不能完成序列化過程。
我嘗試使用Json.Net這樣:
var ret = JsonConvert.SerializeObject(products, new JsonSerializerSettings { Formatting = Formatting.Indented });
我才決定嘗試從Json.Net使用JsonConvert,因爲,在我的控制器動作,試圖返回一個JsonResult,下面的代碼時,我的對象轉換爲JSON有同樣的效率問題:
return Json(products);
我通過EF核心拿到產品本身:
var products = _context.Products.OrderBy(o => o.Name).Where(w => w.IsActive //all products are active
&& (w.Parts.Count(c => c.IsActive) > 0)) //remove parts that are
.Select(pr => new ProductViewModel
{
Id = pr.Id,
Name = pr.Name,
Description = pr.Description,
IsActive = pr.IsActive,
Parts = pr.Parts.OrderBy(o => o.Name).Where(w => w.IsActive) //all parts are active
.Select(prt => new PartViewModel
{
Id = prt.Id,
Name = prt.Name,
IsActive = prt.IsActive,
})
}).ToList();
我該怎麼辦?
閱讀[問],顯示你是如何獲得'產品'。 – CodeCaster
你確定這是需要這麼長時間的序列化過程嗎?另外你可能想在服務器上實現某種分頁以避免內存不足。 –
我加了查詢,@CodeCaster – crackedcornjimmy