如何解决从c#中的动态数据类型转换为.net对象
我有一种方法可以从第三方接收一些数据。数据是JSON对象(不是字符串,我尝试以字符串形式接收,并且数据不可访问-data属性为null)
[HttpPost]
[Route("com/sendemail")]
public async Task<IActionResult> SendEmail(dynamic data)
{
mailData = JsonConvert.DeserializeObject<EmailTemplate>(data);
}
我正在尝试将其放入.net对象,该对象需要传递到我不控制的另一个函数中。它必须是一个EmailTemplate对象,其定义为:
public class EmailTemplate
{
public string From { get; set; }
public string To { get; set; }
public string Subject { get; set; }
public string EmailHtml { get; set; }
}
mailData的类型为EmailTemplate。反序列化对象调用失败,因为该方法需要一个字符串,但这不是。香港专业教育学院尝试了其他方法,例如
mailData = (EmailTemplate)data;
和
mailData.To = data.To
,但都不起作用。感谢所有收到的指针。
PS。这是Visual Studio中数据的样子
解决方法
您的控制器无法接受字符串,因为(我假设)请求的内容类型为'application / json'并且框架无法将其转换为字符串。您应该将控制器的data
参数类型更改为EmailTemplate
:
[HttpPost]
[Route("com/sendemail")]
public async Task<IActionResult> SendEmail([FromBody] EmailTemplate data)
{
//...
}
,
当您的类与发送的Json对象匹配时,它将起作用:
public async Task<IActionResult> SendEmail([FromBody]EmailTemplate data)
使用动态方法时,需要访问动态对象成员并使用它们创建.NET对象。
public async Task<IActionResult> SendEmail([FromBody]dynamic data)
{
mailData = new EmailTemplate {
From = data.From,To = data.To,Subject = data.Subject,EmailHtml = data.EmailHtml
};
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。