JsonAsync 获取正确数量的对象但对象为空 Blazor WASM

JsonAsync Getting correct number of objects but objects are empty Blazor WASM

我正在开发一个 Blazor WASM 网络应用程序,它获取客户订单的预计到达时间,但我的 GetFromJsonAsync() 具有正确数量的对象(客户),但它们都是空对象。

数据来自 excel 电子表格,然后映射到对象(客户、订单、项目),关系是客户有订单列表,订单列表有项目列表。每个客户都被添加到 Customer class 中的静态客户列表中。到目前为止一切正常(我创建了一个程序来测试它,所有数据都在它所属的地方)。

从那里我创建了一个客户存储库,然后 运行 通过客户的静态列表,将每个客户推送到存储库。

    public static void AddCustomerRepository(this IServiceCollection services)
    {
        Workbook workbook = new Workbook();
        workbook.InitWorkbook();
        workbook.MapOrdersFromWorkbook();

        var customerRepository = new MemoryRepository<Customer>();

        foreach (Customer customer in Customer.Customers) {
            customerRepository.Add(customer);
        }

        services.AddSingleton<IRepository<Customer>>(customerRepository);
    }

AddCustomerRepository 在 Web 应用程序启动时 运行。这是 .razor 文件中的 JsonAsync,它在 json (814) 中获取正确数量的对象,但没有数据,因此它是 814 个空对象。

private Customer[] customer;

protected async override Task OnInitializedAsync()
{
    customer = await Http.GetFromJsonAsync<Customer[]>("api/OrderStatus");
    StateHasChanged();
}

这里是 API 控制器:

[Route("api/[controller]")]
[ApiController]
public class OrderStatusController : ControllerBase
{
    private readonly IRepository<Customer> _customerRepository;
    public OrderStatusController(IRepository<Customer> customerRepository)
    {
        _customerRepository = customerRepository;
    }

    [HttpGet]
    public IEnumerable<Customer> Get()
    {
        return _customerRepository.GetAll()
            .OrderBy(customer => customer.number);
    }
}

什么会导致它获得正确数量的对象但对象中没有数据?这是我第一次使用 Blazor WASM,也是我第一次使用 .NET,我肯定会放弃一个比我应该开始的更大的项目,但我现在在这个项目中到目前为止我还没有想报废它。

What would cause it to get the correct number of objects but no data in the objects?

很可能 属性 名称不匹配。

There are 2 classes for Customer,

比较一下。显然它们不“Json兼容”。

更实用的方法是在共享项目中有 1 个 class 客户。看看你能不能做到这一点。

... to a static list of Customers in the Customer class.

把它移到其他地方。它不应该在共享中。


如果您确实需要两个不同的客户 class(这是可能的),请更改您的 API。将 Server.Customer 转换为 Shared.Customer 和 return。您可以使用 AutoMapper。

要点是Client和Server都要使用Shared.Customer进行通信。它是您的数据传输对象 (DTO)。