Visual Studio 2019调试C# Azure Function时POST请求JSON无法反序列化
问题原因
- 核心问题出在你定义的
AppInfo类的成员类型:AppName和UserGuid是公共字段,而非公共属性。你使用的Newtonsoft.Json(JsonConvert所属库)默认仅对公共属性执行序列化/反序列化操作,公共字段不会被自动映射,所以反序列化后两个字段始终保持初始化的空字符串值。 - 附加排查点:可在反序列化代码前打断点,确认
requestBody变量的内容为符合预期的JSON结构,排除格式错误、键名拼写错误等基础问题。
解决方案
方案1(推荐):将AppInfo的字段改为公共属性
直接给成员加上{ get; set; }定义,符合C#类设计规范,也兼容Json.NET的默认反序列化规则:
public class AppInfo { public string AppName { get; set; } = ""; public string UserGuid { get; set; } = ""; }
方案2:保留字段,添加序列化特性
如果你需要保留字段的定义形式,可以给字段添加[JsonProperty]特性,显式告知Json.NET需要序列化/反序列化该字段:
using Newtonsoft.Json; public class AppInfo { [JsonProperty] public string AppName = ""; [JsonProperty] public string UserGuid = ""; }
方案3:修改序列化配置适配字段映射
如果项目中大量使用字段需要序列化,可以在反序列化时传入自定义配置,让Json.NET支持公共字段的映射:
var data = JsonConvert.DeserializeObject<AppInfo>(requestBody, new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver { DefaultMembersSearchFlags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance } });
内容的提问来源于stack exchange,提问作者Matt Small
相关产品推荐
相关产品推荐

