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","re​​ceived":"09-29-2020 17:39:49 ","有效":null,"expiration":null,"displayIsp":null,"displayPos":null,"displayBow":null,"displayHandheld":null,"message":"测试通知 09/29 17:39:49","re​​ceived":"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 服务

Hammock for REST

带有 RestSharp 的 Paypal Rest Api 在 xamarin android 中不起作用

无法通过RestSharp发送cookie

RestSharp:从结果中获取空值。调试结果时的数据虽然返回了 JSON