0

基本上我正在使用 Campaign Monitor 的 webhook。我创建了一个更新 webhook,所以当电子邮件更新时,Campaign Monitor 会向我指定的 URL 发送 HTTP POST 请求。我在解析 JSON 时遇到问题。

这里是:

POST /subscribe HTTP/1.1
Host: example.com:80
Accept: */*
Content-Type: application/json
{
    "Events": [
        {
            "CustomFields": [
                {
                    "Key": "website", 
                    "Value": "http:\/\/example.org"
                }
            ],
           "Date": "2010-12-14 11:32:00",
           "OldEmailAddress": "test@example.org",
           "EmailAddress": "test@example.org",
           "Name": "Test Subscriber Renamed",
           "Type": "Update",
           "State": "Active"
        }
    ],
    "ListID": "96c0bbdaa54760c8d9e62a2b7ffa2e13"
}

我查看了示例http://msdn.microsoft.com/en-ca/library/cc197957(v=vs.95).aspx但无法解决。

我想获取 OldEmailAddress、EmailAddress、Type 和 State。谢谢,

参考 Campaign Monitor 的 webhooks https://www.campaignmonitor.com/api/webhooks/#currently_available_webhooks

谢谢,

4

1 回答 1

0

如果我理解正确,您尝试使用 C# 从 url 获取 json 数据。首先,您需要获取名为 Newtonsoft.Json 的 NuGet 包

然后你可以使用这个代码

using (HttpClient client = new HttpClient())
{

  client.BaseAddress = new Uri("http://yourapisite.com"); // Not whole link, just host

  var url = "link after your host url";

  client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

  HttpResponseMessage response = await client.GetAsync(url);

  if (response.IsSuccessStatusCode)
  {
     var data = response.Content.ReadAsStringAsync();
     YourClass responsedata = JsonConvert.DeserializeObject<YourClass>(data.Result.ToString());



  }

}

希望这有帮助。

编辑 首先,Newtonsoft 对反序列化 json 非常敏感。像 CustomField 这样的每个 json 属性都有一个同名的属性。我编辑了对您的代码的答案。请检查并让我知道它是如何工作的。

我无法调试此代码,因为我不知道您的 api url。

public class Events {
    public Events()
    {
        this.eventData = new List<EventData>();
    }
    public string ListID { get; set; } 
    public List<EventData> eventData { get; set; } 
}
public class EventData {
    public EventData()
    {
        this.CustomFields = new List<CustomFields>();
    }
    public DateTime Date { get; set; }
    public string OldEmailAddress { get; set; }
    public string EmailAddress { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string State { get; set; }

    public List<CustomFields> CustomFields { get; set; }

}
public class CustomFields
{
    public string Key { get; set; }
    public string Value { get; set; }
}
于 2015-01-19T16:06:02.573 回答