从数据库接收数据并将它们转化为字典

Receiving data from a database and turning them into a dictionary

为什么这个功能不起作用:

   [HttpGet("getCustomerAsDict")]
    public async Task<object> GetCustomersAsDict()
    {
        var customOutPut = new Dictionary<int, string>();
        var customer = await _context.Customers.ToListAsync();
        foreach (var custom in customer)
        {
            customOutPut[custom.CustomerId] = custom.CustomerName;
        }
        return customOutPut;
    }

邮递员投掷: System.NotSupportedException: 不支持集合类型'System.Collections.Generic.Dictionary`2[System.Int32,System.String]'。

状态:500 内部服务器错误

但是这个函数确实有效:

  [HttpGet("getCustomerAsDict")]
    public async Task<object> GetCustomersAsDict()
    {
        var customOutPut = new Dictionary<string, int>();
        var customer = await _context.Customers.ToListAsync();
        foreach (var custom in customer)
        {
            customOutPut[custom.CustomerName] = custom.CustomerId;
        }
        return customOutPut;
    }

邮递员给了我需要的答案

我刚刚测试了 var customOutPut = new Dictionary() 字典,Posman 返回了结果

{
    "1": "cust1",
    "2": "cust2"
}

我的控制器配置为使用 Newtonsoft.Json,我猜它会自动将 int 转换为字符串以创建有效的 json、

但是这个json无效

{
    1: "cust1",
    2: "cust2"
}

这就是您遇到异常的原因。我做了一些研究,发现 System.Text.Json: The collection type ‘System.Collections.Generic.Dictionary[System.Int32,System.String]is not supported 是 net core 3.1-5.0 的常见问题。但它似乎已经为 net 6 修复。如果您使用早期版本,建议 Text.Json 创建一个自定义 DictionaryConverter 作为解决方法

但我个人会尝试使用此解决方法

var customOutPut = new Dictionary<string, string>();
     
foreach (var custom in customer)
  customOutPut.Add(custom.CustomerId.ToString(), custom.CustomerName);

收到数据后,可以将customerId转回int。您的变体 2 可能无法正常工作,因为字典键必须是唯一的。

但是如果您尝试获取字典值,它仍然有效,因为它不是 json

var val=  customOutPut[1]; //cust1