问题描述:
[Serializable]
public class MsgEventInput : MessageBase
{
public string DocID { get; set; }
public string ResultJsonPath { get; set; }
public List<BQEVENTSQueryItem> Events { get; set; }
}
- 如上面的一个通信实体通过Post 方法进行传递,发现始终无法命中 Controller 对应的Post方法。如下:
[HttpPost("GetEventsInfo")]
public IActionResult GetEventsInfo([FromBody] MsgEventInput envent)
{
// Read the request body
}
- 检查后发现是传入实体的第二个字段 ResultJsonPath 为 Null, 而实体类定义又是非空类型,导致赋值时出错。将实体类定义改为如下代码,问题解决。
[Serializable]
public class MsgEventInput : MessageBase
{
public string? DocID { get; set; }
public string?ResultJsonPath { get; set; }
public List<BQEVENTSQueryItem>? Events { get; set; }
}
总述:
我们在构建序列化和反序列化实体对象时,应尽可能采用可空类型进行定义,从而避免反序列化时发生错误。