ASP.NET 4.8中Multipart JSON文件反序列化后字段为空问题排查
ASP.NET 4.8 直接反序列化上传JSON文件问题解决
问题原因与修复点
1. 反序列化类型名称大小写错误
你在反序列化时用了小写的exampleObject,但实际类名是ExampleObject(首字母大写),Json.NET无法匹配到正确类型,导致反序列化后得到空对象。
2. 响应返回方式错误
ResponseMessage方法要求传入HttpResponseMessage对象,直接传importedExampleObject属于语法错误,需要用标准的响应返回方法。
3. 导出代码语法错误
导出代码里FileName = exampleObject.FileName;末尾多了分号,会导致编译失败,需要去掉。
4. 可选验证步骤
读取multipart内容后,可以先打印jsonString确认内容是否正确,排查是否是上传的文件本身有格式问题。
修正后的完整代码
导出接口代码
[HttpGet] public IHttpActionResult ExportObjectToFile() { var exampleObject = new ExampleObject(); var response = Request.CreateResponse(HttpStatusCode.OK, exampleObject, JsonMediaTypeFormatter.DefaultMediaType); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(DispositionTypeNames.Attachment) { FileName = exampleObject.FileName }; return ResponseMessage(response); }
导入接口代码
[HttpPost] public async Task<IHttpActionResult> ImportObjectFromFile() { var multipartForm = await Request.Content.ReadAsMultipartAsync().ConfigureAwait(false); var fileContent = multipartForm.Contents.FirstOrDefault(); if (fileContent == null) { return BadRequest("未检测到上传文件"); } var jsonString = await fileContent.ReadAsStringAsync().ConfigureAwait(false); // 可添加日志输出验证JSON内容:Debug.WriteLine(jsonString); var importedExampleObject = JsonConvert.DeserializeObject<ExampleObject>(jsonString); if (importedExampleObject == null) { return BadRequest("JSON内容无法反序列化为ExampleObject对象"); } return Ok(importedExampleObject); }
额外注意事项
- 确保
ExampleObject类的属性为public,且属性名称与JSON中的键名一致(若需自定义映射,可使用[JsonProperty]特性)。 - 上传请求需确保
multipart/form-data格式正确,且包含的文件确实是有效的JSON内容。
内容的提问来源于stack exchange,提问作者Nomnom
相关产品推荐
相关产品推荐

