RestSharp将一个属性反序列化为null

时间:2016-04-05 05:39:00

标签: c# json restsharp

我正在使用RestSharp来使用API​​并在返回时反序列化内容。这适用于除我的一个对象属性之外的所有属性:

"envId":":AU1:m:w:p:7:^W160216110747138.nev"

我的c#对象中为null。我怀疑价值中的冒号并不好看,但我不确定。

在测试时,我将JSON.NET反序列化实现到同一个对象,该对象成功解析了该属性。我假设我的c#类很好,而且解串器失败了。

以下是完整的休息方法。

private static T HttpGet<T>(string url) where T : new()
    {
        var client = new RestClient(BaseApiUrl);
        client.Timeout = 1000 * 15;            
        client.ClearHandlers();
        client.AddHandler("application/json", new JsonDeserializer());

        var request = new RestRequest(url, Method.GET);
        request.AddHeader("Authorization", "Bearer " + App.Current.Properties["AccessToken"]);

        // Does not parse EnvID property
        IRestResponse<T> returnObject = client.Execute<T>(request);

        // Testing JSON.NET deserialization - does parse EnvID property
        var content = returnObject.Content;
        var test = JsonConvert.DeserializeObject<T>(content);
        //

        return returnObject.Data;
    }

实施

string url = //url string here
StorageObject results = HttpGet<StorageObject>(url);

下面是我正在反序列化的课程(我已将大部分属性排除在外,我对所有其他属性没有任何问题)

public class StorageObject
{
    public StandardAttribute StandardAttributes { get; set; }

    public List<CustomAttribute> CustomAttributes { get; set; }


    public StorageObject() {            
        CustomAttributes = new List<CustomAttribute>();
    }     

}

 public class StandardAttribute
{
    public string EnvID { get; set; }
    public string ID { get; set; }    
}

最后,我正在考虑仍然使用RestSharp来“执行”其余的调用,但是使用JSON.NET反序列化响应内容来解决这个问题。在安装最新版本的RestSharp时,我注意到有关使用JSON.NET的警告,但我不确定存在哪些风险。

1 个答案:

答案 0 :(得分:1)

由于RestSharp从JSON.NET切换到他们自己的序列化程序,我发现了一个案例,它无法正确反序列化来自众所周知的API的响应。您可以轻松使用自己的串行器/解串器,只需实现ISerializer和IDeserializer接口即可。 请参阅example implementation using JSON.NET