C# MVC如何定义实体类以接收不可修改JSON中的RegionMap字段值
问题原因
你定义的RegionMap字段类型为Array,但传入JSON中的RegionMap是键值对结构的对象,不是数组结构,所以序列化时无法完成类型映射,导致无法获取有效值。
解决方案
将RegionMap的类型修改为Dictionary<string, int>即可,C# 常用的序列化组件(包括DataContract序列化、Newtonsoft.Json、System.Text.Json)都支持将JSON对象自动映射为Dictionary结构,无论键值对数量多少都能正常适配。
修改后的实体类代码如下:
[DataContract] public class Presence { [DataMember] public bool presenceDetected { get; set; } [DataMember] public long timestamp { get; set; } [DataMember] public Dictionary<string, int> RegionMap { get; set; } [DataMember] public string deviceId { get; set; } }
后续遍历的写法示例:
public void MonitorPresence([FromBody] Presence APresenceData) { foreach (var item in APresenceData.RegionMap) { var regionKey = item.Key; // 对应JSON里的键,比如"0"、"1" var regionValue = item.Value; // 对应键的值,比如1、0 // 你的业务逻辑 } }
如果业务逻辑里Region的键本身是数字含义,也可以直接声明为Dictionary<int, int>,序列化组件会自动完成字符串键到int键的转换,不需要额外处理。
内容的提问来源于stack exchange,提问作者kurabdurbos
相关产品推荐
相关产品推荐

