gpt4 book ai didi

c# - 如何确定 JSON 响应是否将绑定(bind)到模型

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:54 25 4
gpt4 key购买 nike

我们有一个第 3 方服务提供商,它基于操作使用 JSON 将通知 Webhook 发送到我们的 Webhook URL。由于我只能提供 1 个 webhook url,所有通知都需要汇集到 1 个 url。我需要确定要反序列化到哪个模型。

我了解如何将 JSON 字符串反序列化为对象模型。

这是第一次发送到我们的 webhook 的示例

{
"providerAccount": {
"id": XXXXXX,
"aggregationSource": "USER",
"refreshInfo": {
"statusCode": 801,
"statusMessage": "ADD_IN_PROGRESS",
"status": "IN_PROGRESS",
"additionalStatus": "LOGIN_IN_PROGRESS"
}
}
}

然后又过了 10 秒左右,另一个 JSON webhook 进来了。

{
"event": {
"info": "REFRESH.INTERIM_PROGRESS",
"loginName": "XXXXXX",
"data": {
"providerAccount": {
"id": XXXXXX,
"providerId": XXXXXX,
"isManual": false,
"createdDate": "2017-12-08",
"aggregationSource": "USER",
"refreshInfo": {
"status": "IN_PROGRESS",
"additionalStatus": "LOGIN_SUCCESS",
"statusCode": 0,
"statusMessage": "OK",
"nextRefreshScheduled": "0001-01-01T00:00:00",
"lastRefreshed": "0001-01-01T00:00:00",
"lastRefreshAttempt": "0001-01-01T00:00:00"
},
"loginForm": null
}
}
}
}

如您所见,它们是我需要反序列化的 2 个独立模型对象。

我发现在第一个模型到第二个模型上检查 null 似乎是错误的,可以通过不同的方式实现。

还有另外 3 个不同的 JSON 字符串来自同一个 webhook。并检查模型是否为空,如果此模型为空等。然后转到下一个似乎是错误的。

最佳答案

我建议使用 Newtonsoft.json 包,如果您还没有使用它,可以通过 nuget 安装它。您可以轻松地将所有 JSON 请求作为 JContainer 接受,然后检查一个字段,如果该字段存在,您可以将 JSON 反序列化为适当的模型。

如果您有 4 个不同的模型,那么您应该有 4 个具有不同结构的半唯一 JSON 字符串,可以通过检查特定字段、对象或数组来识别这些字符串。

   public HttpResponseMessage WebhookCallback(JContainer jsonData)
{
// Check to make sure we're getting an object not an array.
if(jsonData.Type == JTokenType.Object)
{
var jObject = jsonData as JObject;

// If this is an event type object parse it depending on the value of the info field.
if(jObject["event"] != null)
{

if (jObject["info"] != null && jObject["info"].ToString() == "REFRESH.INTERIM_PROGRESS")
{
InterimProgress interimProgress = Newtonsoft.Json.JsonConvert.DeserializeObject<InterimProgress>(jObject["data"].ToString());
}

if (jObject["info"] != null && jObject["info"].ToString() == "REFRESH.END_PROGRESS")
{
EndProgress interimProgress = Newtonsoft.Json.JsonConvert.DeserializeObject<EndProgress>(jObject["data"].ToString());
}
}
else if (jObject["providerAccount"] != null)
{
ProviderAccount providerAccount = jObject.ToObject<ProviderAccount>();
}
}

return Request.CreateResponse(HttpStatusCode.OK);
}

如果您不想先反序列化为 JContainer,您始终可以尝试匹配唯一键,然后反序列化为正确的对象。

关于c# - 如何确定 JSON 响应是否将绑定(bind)到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com