C# SendGrid:未填充对象的电子邮件活动API JSON响应的反序列化

C# SendGrid:未填充对象的电子邮件活动API JSON响应的反序列化,c#,json,sendgrid,restsharp,sendgrid-api-v3,C#,Json,Sendgrid,Restsharp,Sendgrid Api V3,我使用REST客户端调用SendGrid的电子邮件活动API,它通过标准JSON响应正确返回数据 但是,我希望将其反序列化为C#对象,因为它比原始JSON字符串更容易处理。因此,我创建了一个C#类,该类在JSON响应中具有每个字段的公共属性,并为它们提供带有JSON字段确切名称的注释 但是,当我调用JsonDeserializer().Deserialize>(响应)时,虽然没有错误/异常,但对象中的所有字段都为空 你知道怎么了吗?(您可以去掉“EventType”引用,因为它在这里并不真正相关

我使用REST客户端调用SendGrid的电子邮件活动API,它通过标准JSON响应正确返回数据

但是,我希望将其反序列化为C#对象,因为它比原始JSON字符串更容易处理。因此,我创建了一个C#类,该类在JSON响应中具有每个字段的公共属性,并为它们提供带有JSON字段确切名称的注释

但是,当我调用JsonDeserializer().Deserialize>(响应)时,虽然没有错误/异常,但对象中的所有字段都为空

你知道怎么了吗?(您可以去掉“EventType”引用,因为它在这里并不真正相关)。相关代码如下

我使用的是RestSharp v106.6.10.0和Newtonsoft.Json v9.0.0.0(后者可能更老,但这是我们通常使用的库)。 项目是.NETV4.6.1

    private void QuerySendGridForEmailActivity(EventType eventType)
    {
string query = string.Empty;

RestClient client = null;//new RestClient(emailActivityEndpoint);
RestRequest request = new RestRequest(Method.GET);

request.AddHeader("Authorization", "Bearer " + apiKey);
request.AddParameter("limit", "1000");

if (eventType == EventType.Opens)
{
    //    request.AddParameter("query", WebUtility.UrlEncode("(Contains(events,\"open\"))"));

    client = new RestClient(emailActivityEndpoint + "?limit=10&query=" + System.Web.HttpUtility.UrlPathEncode("(Contains(events,\"open\"))"));
}

IRestResponse response = client.Execute(request);


if (response != null && response.StatusCode == HttpStatusCode.OK)
{
    this.emailActivityEvents = new JsonDeserializer().Deserialize<List<EmailActivityEvent>>(response);

    int i = 0;

}
else
{

}
    }

    public class EmailActivityEvent
    {
[DeserializeAs(Name = "from_email")]
public string FromEmail { get;set; }

[DeserializeAs(Name = "msg_id")]
public string MessageId { get; set; }

[DeserializeAs(Name = "subject")]
public string Subject { get; set; }

[DeserializeAs(Name = "to_email")]
public string ToEmail { get; set; }

[DeserializeAs(Name = "status")]
public string Status { get; set; }

[DeserializeAs(Name = "opens_count")]
public int OpensCount { get; set; }

[DeserializeAs(Name = "clicks_count")]
public int ClicksCount { get; set; }

[DeserializeAs(Name = "last_event_time")]
public DateTime LastEventTime { get; set; }
    }
private void querySendGridForMailActivity(EventType EventType)
{
string query=string.Empty;
RestClient=null;//新建RestClient(emailActivityEndpoint);
RestRequest请求=新的RestRequest(Method.GET);
请求.AddHeader(“授权”、“承载人”+apiKey);
请求。添加参数(“限制”、“1000”);
if(eventType==eventType.Opens)
{
//request.AddParameter(“query”,WebUtility.UrlEncode((包含(事件,\“打开”)));
client=new RestClient(emailActivityEndpoint+“?limit=10&query=“+System.Web.HttpUtility.UrlPathEncode”((包含(事件,\'open\”)));
}
IRestResponse response=client.Execute(请求);
if(response!=null&&response.StatusCode==HttpStatusCode.OK)
{
this.emailActivityEvents=新的JsonDeserializer()。反序列化(响应);
int i=0;
}
其他的
{
}
}
公共类EmailActivityEvent
{
[反序列化(Name=“from_email”)]
电子邮件{get;set;}中的公共字符串
[反序列化(Name=“msg_id”)]
公共字符串MessageId{get;set;}
[反序列化(Name=“subject”)]
公共字符串主题{get;set;}
[反序列化(Name=“to_email”)]
公共字符串ToEmail{get;set;}
[反序列化(Name=“status”)]
公共字符串状态{get;set;}
[反序列化(Name=“opens\u count”)]
public int openscont{get;set;}
[反序列化(Name=“clicks\u count”)]
public int clickScont{get;set;}
[反序列化(Name=“last\u event\u time”)]
公共日期时间LastEventTime{get;set;}
}

好的,我本应该早点拿到,但我认为我不需要这么做

我不得不添加另一个名为“EmailActivity”的类,它只有一个电子邮件事件列表,带有一个反序列化注释,与JSON中项目的实际名称相匹配。像这样:

public class EmailActivity
    {
        [DeserializeAs(Name = "messages")]
        public List<EmailActivityEvent> Events { get; set; }
    }

谢谢你的评论

我不使用RestSharp,但通常需要访问响应的内容,而不是主体负载的响应本身。是的,这是有道理的,但RestSharp JsonDeserializer确实需要一个IRestResponse对象。我只是尝试在使用旧版本时更新Newtonsoft.Json,但似乎没有任何效果。该死。谢谢你的回复!尝试使用类型化()客户端反序列化
response.Content
,而不是像示例中那样反序列化
response
var emailActivity = new JsonDeserializer().Deserialize<EmailActivity>(response);
{"messages":
[{
    "from_email":"from@email.com",
    "msg_id":"msgid",
    "subject":"Test",
    "to_email":"to@email.com",
    "status":"delivered",
    "opens_count":0,
    "clicks_count":0,
    "last_event_time":"2019-11-26T20:30:02Z"
},
{
    "from_email":"from@email.com",
    "msg_id":"msgid",
    "subject":"Test",
    "to_email":"to@email.com",
    "status":"delivered",
    "opens_count":0,
    "clicks_count":0,
    "last_event_time":"2019-11-26T20:30:01Z"
},
{
    "from_email":"from@email.com",
    "msg_id":"msgid",
    "subject":"Test",
    "to_email":"to@email.com",
    "status":"delivered",
    "opens_count":0,
    "clicks_count":0,
    "last_event_time":"2019-11-25T22:06:25Z"
}
]}