RestSharp 获取 REST 数据但不会反序列化
Posted
技术标签:
【中文标题】RestSharp 获取 REST 数据但不会反序列化【英文标题】:RestSharp Gets REST Data But Won't Deserialize 【发布时间】:2021-01-15 13:03:36 【问题描述】:我正在尝试使用 RestSharp 从 REST Web 服务获取数据。该服务正在返回数据,我可以在 RestResponse 对象的内容字符串中看到 JSON,但是无论我在数据库中插入多少行,RestResponse 对象的 Data 数组都只包含一个条目,并且所有字段都为空。
这是通知对象
public class Notification
[JsonProperty("message")]
public string MessageText get; set;
[JsonProperty("received")]
public string NotificationDateTime get; set;
[JsonProperty("effective")]
public string EffectiveDateTime get; set;
[JsonProperty("expiration")]
public string ExpirationDateTime get; set;
[JsonProperty("displayIsp")]
public string DisplayAtIsp get; set;
[JsonProperty("displayPos")]
public string DisplayAtPos get; set;
[JsonProperty("displayBow")]
public string DisplayAtBow get; set;
[JsonProperty("displayHandheld")]
public string DisplayAtMobile get; set;
网络服务调用
try
var restClient = new RestClient(new Uri(serviceUrl)) ThrowOnAnyError = true;
var restRequest = new RestRequest($"/_companyCode/_storeNumber/", Method.GET);
var notifications = restClient.Execute<List<Notification>>(restRequest);
Console.WriteLine();
catch (Exception exception)
Console.WriteLine( exception.Message );
JSON 数据
"notifications": [
"message": "test notification 09/29 17:39:49",
"received": "09-29-2020 17:39:49",
"effective": null,
"expiration": null,
"displayIsp": null,
"displayPos": null,
"displayBow": null,
"displayHandheld": null
,
"message": "test notification 09/29 17:39:49",
"received": "09-29-2020 17:39:49",
"effective": null,
"expiration": null,
"displayIsp": null,
"displayPos": null,
"displayBow": null,
"displayHandheld": null
],
"companyNbr": 2,
"storeNbr": 988
【问题讨论】:
这能回答你的问题吗? Deserializing a json string with newtonsoft or restsharp 自从我使用 RestSharp 已经有一段时间了,但我推测问题是它不知道如何将Content
的内容转换为 Notification
对象:没有明显的“通知”标签和Notification
对象之间的链接。
JSON 是什么样的?
JSON 数据 = "notifications":["message":"测试通知 09/29 17:39:49","received":"09-29-2020 17:39:49 ","有效":null,"expiration":null,"displayIsp":null,"displayPos":null,"displayBow":null,"displayHandheld":null,"message":"测试通知 09/29 17:39:49","received":"09-29-2020 17:39:49","有效":null,"expiration":null,"displayIsp":null,"displayPos":null,"displayBow ":null,"displayHandheld":null],"companyNbr":2,"storeNbr":988
在 N.Dogac 发布的链接之后,我改为使用 JsonConvert .... 来反序列化通知的单个实例。但是反序列化仍然为所有字段返回 null
【参考方案1】:
创建一个包含通知列表的通知根对象,并从根中反序列化。
public class NotificationsRoot
[JsonProperty("notifications")]
public List<Notification> Notifications get; set;
public int companyNbr get; set;
public int storeNbr get; set;
然后像这样反序列化......
var notifications = restClient.Execute<NotificationsRoot>(restRequest);
【讨论】:
看起来不需要JsonProperty
属性,因为该属性称为notifications
谢谢。这有帮助。我现在得到 NotificationsRoot 对象内的 Notification 对象列表,但数据仍然为空。以上是关于RestSharp 获取 REST 数据但不会反序列化的主要内容,如果未能解决你的问题,请参考以下文章
c# JSON REST 响应通过 3 种不同的方法(WebRequest、RESTSharp、HttpClient)是空的,但 Postman 和浏览器可以工作
RestSharp - 授权标头未涉及 WCF REST 服务