![](/img/trans.png)
[英]Proper way to de-serialize a property of type collection of abstract object in Asp.net Core web API
[英]ASP.NET Core web api serialize an object's List type property
服務器返回object后,List type字段就不見了。
每個EmployeeViewModel
都有一個EmployeeContactViewModel
對象列表。 預期的邏輯是,在從數據庫中查詢員工 object 后,在方法中填充視圖 model,包括列表,然后返回給客戶端。
視圖model:
public class EmployeeViewModel
{
public List<EmployeeContactViewModel> EmployeeContacts;
public EmployeeViewModel()
{
EmployeeContacts = new List<EmployeeContactViewModel>();
}
public string EmployeeId { get; set; }
public string EmployeeName { get; set; }
// more fields
}
填充視圖模型的方法:
public EmployeeViewModel GetViewModelFromEmpObject()
{
var vm = new EmployeeViewModel();
var contact1 = this.CONTACTs.Where(e => e.ContactId == 1).FirstOrDefault();
if (contact1 != null)
{
var contactVm1 = new EmployeeContactViewModel();
CopyContactFields(contact1, contactVm1); // method to populate view-model
vm.EmployeeContacts.Add(contactVm1);
}
else
vm.EmployeeContacts.Add(new EmployeeContactViewModel());
var contact2 = this.CONTACTs.Where(e => e.ContactId == 2).FirstOrDefault();
if (contact2 != null)
{
var contactVm2 = new EmployeeContactViewModel();
CopyContactFields(contact1, contactVm2); // method to populate view-model
vm.EmployeeContacts.Add(contactVm2);
}
else
vm.EmployeeContacts.Add(new EmployeeContactViewModel());
// more lines below
}
api controller 方法如下。 通過在返回行設置斷點,我可以看到EmployeeContactViewModel
列表已正確創建。
[HttpGet("{empid:string}")]
public async Task<EmployeeViewModel> GetAsync(string empid)
{
Employee emp = await _context.Employees
.Include(c => c.CONTACTs)
.Where(c => c.EmployeeId == empid)
.FirstOrDefaultAsync();
var viewModel = emp.GetViewModelFromEmpObject();
return viewModel;
}
然而在客戶端,雖然所有其他字段( EmployeeId
、 EmployeeName
等)都出現在響應中,但在 browser.network 選項卡中檢查服務器響應時, EmployeeContacts
列表沒有任何內容。
我嘗試在詢問之前進行搜索,但使用“Serialize”作為關鍵字只會獲得有關如何進行序列化的主題。 任何建議表示贊賞。
您的意思是響應結果中不包含EmployeeContacts
嗎?
您可以安裝Microsoft.AspNetCore.Mvc.NewtonsoftJson
,並在 Program.cs 中添加這一行:
builder.Services.AddMvc().AddNewtonsoftJson(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.