将 JSON 反序列化为自定义 class returns null
Deserialize JSON to custom class returns null
我有一个包含两个微服务的 MVC 应用程序。首先我调用 PostAsync()
方法来发送我的自定义对象
public class Logo {
public Guid Id { get; set; }
public IEnumerable<byte> Content { get; set; }
}
到另一个服务
public async Task PostLogo(Logo logo)
{
using (var client = new HttpClient())
{
await client.PostAsync(_url, new StringContent(JsonConvert.SerializeObject(logo), Encoding.UTF8, "application/json"));
}
}
在第二个微服务中,我尝试使用
反序列化
[HttpPost, Route("logo")]
public Task<FileUploadResultModel> SaveAsync([FromBody]Logo model)
{
return _fileService.SaveAsync(null);
}
但它得到的是 null 而不是输入对象
.
谁能解释一下如何使用 Post 请求 send/process 自定义对象?
更新操作以遵循首选语法结构。
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
FileUploadResultModel result = await _fileService.SaveAsync(model);
return Ok(result);
}
return BadRequest();
}
根据评论,字节数组可能太大,因此模型绑定器无法正确绑定模型。检查 web.config 并查看可以发送的最大数据大小是多少。您可能需要增加它。最大值为 2GB,但我建议不要设置这么高的值。
检查这个答案:超过最大请求长度
如果您能够将图像缩小,您应该使用 base64 Url 将该图像编码为字符串并将其作为内容发送。
public class Logo {
public Guid Id { get; set; }
public string Content { get; set; }
}
并且当您获得模型时,将内容转换回字节数组
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
byte[] content = Convert.FromBase64String(model.Content);
var id = model.Id;
//...
return Ok(result);
}
return BadRequest();
}
我有一个包含两个微服务的 MVC 应用程序。首先我调用 PostAsync()
方法来发送我的自定义对象
public class Logo {
public Guid Id { get; set; }
public IEnumerable<byte> Content { get; set; }
}
到另一个服务
public async Task PostLogo(Logo logo)
{
using (var client = new HttpClient())
{
await client.PostAsync(_url, new StringContent(JsonConvert.SerializeObject(logo), Encoding.UTF8, "application/json"));
}
}
在第二个微服务中,我尝试使用
反序列化[HttpPost, Route("logo")]
public Task<FileUploadResultModel> SaveAsync([FromBody]Logo model)
{
return _fileService.SaveAsync(null);
}
但它得到的是 null 而不是输入对象
谁能解释一下如何使用 Post 请求 send/process 自定义对象?
更新操作以遵循首选语法结构。
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
FileUploadResultModel result = await _fileService.SaveAsync(model);
return Ok(result);
}
return BadRequest();
}
根据评论,字节数组可能太大,因此模型绑定器无法正确绑定模型。检查 web.config 并查看可以发送的最大数据大小是多少。您可能需要增加它。最大值为 2GB,但我建议不要设置这么高的值。
检查这个答案:超过最大请求长度
如果您能够将图像缩小,您应该使用 base64 Url 将该图像编码为字符串并将其作为内容发送。
public class Logo {
public Guid Id { get; set; }
public string Content { get; set; }
}
并且当您获得模型时,将内容转换回字节数组
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
byte[] content = Convert.FromBase64String(model.Content);
var id = model.Id;
//...
return Ok(result);
}
return BadRequest();
}