簡體   English   中英

ASP.NET Core web api 序列化對象的List類型屬性

[英]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;
}

然而在客戶端,雖然所有其他字段( EmployeeIdEmployeeName等)都出現在響應中,但在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM