微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从c#中的动态数据类型转换为.net对象

如何解决从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中数据的样子

enter image description here

解决方法

您的控制器无法接受字符串,因为(我假设)请求的内容类型为'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 举报,一经查实,本站将立刻删除。