2017-07-31 30 views
3

我試圖實現新的GoCardless API,但我在處理webhooks時遇到問題。GoCardless事件不會Deserialise

我已經,做閱讀到一個字符串的響應:

Stream req = Request.InputStream; 
req.Seek(0, System.IO.SeekOrigin.Begin); 

string requestContent = new StreamReader(req).ReadToEnd(); 

這給了我一個JSON響應如下:

"{\"events\":[{\"id\":\"EV000SDG4B5WRP\",\"created_at\":\"2017-07-31T08:17:16.202Z\",\"resource_type\":\"mandates\",\"action\":\"cancelled\",\"links\":{\"mandate\":\"MD0002010AE1MV\"},\"details\":{\"origin\":\"api\",\"cause\":\"bank_account_closed\",\"description\":\"The customer's account was disabled at your request.\"},\"metadata\":{}}]}" 

根據該文件,我應該再能要做

JsonConvert.DeserializeObject<GoCardless.Resources.Event>(requestContent); 

但是,這總是給我一個空白對象,所有的屬性設置爲null。

的源代碼的事件類可以在這裏找到:https://github.com/gocardless/gocardless-dotnet/blob/master/GoCardless/Resources/Event.cs

爲什麼會這樣無法反序列化對象?

回答

4

很確定JSON是一組事件。所以首先你需要一個根對象:

public class Root 
{ 
    public List<GoCardless.Resources.Event> Events { get; set; } 
} 

現在deserialise成類型:

var events = JsonConvert.DeserializeObject<Root>(requestContent); 
+0

我不知道,太多,但是當我嘗試,我得到一個錯誤:「'無法反序列化當前的JSON對象(如{\「name \」:\「value \」})轉換爲類型'System.Collections.Generic.List'1 [GoCardless.Resources.Event]',因爲該類型需要一個JSON數組(例如[1,2, 3])正確地進行反序列化。# –

+0

糟糕,我的錯誤 - 你需要一個根對象 - 已編輯 – DavidG

+0

是的 - 它的工作!如果他們只是保持簡單,併爲每個事件分別撥打電話 –