You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中TypeScript字典对象传递至C# API的参数格式问题

Angular向C# API传递字典对象的格式问题及解决方法

问题原因

你当前生成的JSON是数组结构:

{"ItemChanges":[{"Id":"123","deleted":true}]}

但C#端的SetChangesViewedCommand类中,ItemChanges是Dictionary<string, bool>类型,该类型期望JSON是键值对对象,而非包含Id和deleted字段的数组,因此Model绑定失败,导致接收值为空。

解决步骤

1. 调整TypeScript数据构建逻辑

将原来的Map转换为键值对对象,直接以元素Id为键、deleted为值:

// 构建符合字典格式的对象
const changesetUpdates: { [key: string]: boolean } = {};

changeUpdates.loadTenderChangeUpdates.forEach((element) => {
  changesetUpdates[element.Id] = element.deleted;
});

2. 修正TypeScript接口定义

确保接口结构与C#端的Command类匹配:

export interface ChangeUpdates {
  ItemChanges: { [key: string]: boolean }; // 对应C#的Dictionary<string, bool>
}

3. 验证生成的JSON格式

调整后生成的JSON应该是如下结构,这样C#端才能正确解析:

{"ItemChanges":{"123":true}}

额外说明

如果确实需要传递数组结构(比如要保留更多字段),可以修改C#端的Command类,定义一个包含Id和Deleted属性的实体类,然后将ItemChanges改为List<YourEntity>类型,比如:

public class ItemChange
{
    public string Id { get; set; }
    public bool Deleted { get; set; }
}

public class SetChangesViewedCommand : IRequest<int>
{
    public List<ItemChange> ItemChanges { get; set; }
}

这种情况下你原来的JSON格式就能正常绑定,但需要根据实际业务需求选择合适的结构。

内容的提问来源于stack exchange,提问作者TrevorGoodchild

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:22:47