2015-01-19 3 views
0

В основном я работаю с веб-узлом Campaign Monitor. Я создал обновление webhook, поэтому, когда электронная почта обновлена, Campaign Monitor отправляет HTTP-запрос POST указанному URL-адресу. У меня возникли проблемы с анализом JSON.HTTP POST-запрос Parse Campaign в JSON с использованием C#

Здесь:

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[email protected]", 
      "EmailAddress": "[email protected]", 
      "Name": "Test Subscriber Renamed", 
      "Type": "Update", 
      "State": "Active" 
     } 
    ], 
    "ListID": "96c0bbdaa54760c8d9e62a2b7ffa2e13" 
} 

Я посмотрел на примере http://msdn.microsoft.com/en-ca/library/cc197957(v=vs.95).aspx но не мог заставить работать его.

Я хотел бы получить OldEmailAddress, адрес электронной почты, тип и состояние. Спасибо,

Ссылка на webhooks Campaign Monitor в https://www.campaignmonitor.com/api/webhooks/#currently_available_webhooks

Спасибо,

+0

Вы сталкиваетесь с какой-либо ошибкой или исключением при разборе json или вам нужен подход, чтобы разобрать его? –

+0

Мне нужен подход, чтобы разобрать его. Благодарю. – riz

ответ

0

Если я правильно понимаю, что вы пытаетесь получить данные JSON из URL с помощью C#. Прежде всего, вам нужно получить NuGet пакеты, называемые Newtonsoft.Json

Затем вы можете использовать этот код

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()); 



    } 

}

Надежда эта помощь.

EDIT Прежде всего, Newtonsoft очень чувствительны к десериализации json.Every JSon собственности как CustomField имеет свойство с таким же именем. Я отредактировал свой ответ на ваш код. Пожалуйста, проверьте и дайте мне знать, как работает.

Я не могу отладить этот код, потому что я не знал ваш URL-адрес api.

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; } 
} 
+0

Спасибо за ответ Фатих. Теперь я могу получить строку json, но не могу разобрать ее. Я предполагаю, что моя структура классов неверна. Вот мой код: События события = JsonConvert.DeserializeObject (json); public class Events { public string ListID {get; задавать; } public EventData eventData {get; задавать; } } public class EventData { общедоступная строка date {get; задавать; } // и другие элементы для события } // Я могу получить ListID, но не данные Event – riz