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

RestSharp deserializing one property as null

我正在使用 RestSharp 使用 API 并反序列化 return 上的内容。除了我的一个对象属性外,这对所有对象都可以正常工作:

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

它在我的 C# 对象中为空。我怀疑值中的冒号不太好用,但我不确定。

在我测试时,我对同一个对象实施了 JSON.NET 反序列化,它成功地解析了 属性。我假设我的 c# class 没问题,它是失败的反序列化器。

下面是完整的休息方法。

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);

下面是 class 我也在反序列化(我已将大部分属性排除在外,其他所有属性都没有问题)

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 来 'Execute' 其余调用,但使用 JSON.NET 反序列化响应内容来解决这个问题。我在安装最新版本的 RestSharp 时注意到有关使用 JSON.NET 的警告,但我不确定风险是什么。

自从 RestSharp 从 JSON.NET 切换到他们自己的序列化程序后,我发现了不止一种情况,它无法正确反序列化来自众所周知的 API 的响应。使用您自己的 serializer/deserializer 很容易,只需实现 ISerializer 和 IDeserializer 接口即可。
看到一个 example implementation using JSON.NET.