GoCardless 事件不会反序列化
GoCardless Event Won't Deserialise
我正在尝试实施新的 GoCardless API,但我在处理 webhook 时遇到问题。
我已经读取了对字符串的响应,方法是:
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);
但是,这总是给我一个空白对象,所有属性都设置为空。
事件 class 的源代码可以在这里找到:https://github.com/gocardless/gocardless-dotnet/blob/master/GoCardless/Resources/Event.cs
为什么这不会反序列化为对象?
很确定 JSON 是一组事件。所以首先你需要一个根对象:
public class Root
{
public List<GoCardless.Resources.Event> Events { get; set; }
}
现在反序列化为该类型:
var events = JsonConvert.DeserializeObject<Root>(requestContent);
我正在尝试实施新的 GoCardless API,但我在处理 webhook 时遇到问题。
我已经读取了对字符串的响应,方法是:
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);
但是,这总是给我一个空白对象,所有属性都设置为空。
事件 class 的源代码可以在这里找到:https://github.com/gocardless/gocardless-dotnet/blob/master/GoCardless/Resources/Event.cs
为什么这不会反序列化为对象?
很确定 JSON 是一组事件。所以首先你需要一个根对象:
public class Root
{
public List<GoCardless.Resources.Event> Events { get; set; }
}
现在反序列化为该类型:
var events = JsonConvert.DeserializeObject<Root>(requestContent);