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
相关产品推荐
相关产品推荐

