我正在使用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的警告,但我不确定存在哪些风险。
答案 0 :(得分:1)
由于RestSharp从JSON.NET切换到他们自己的序列化程序,我发现了一个案例,它无法正确反序列化来自众所周知的API的响应。您可以轻松使用自己的串行器/解串器,只需实现ISerializer和IDeserializer接口即可。 请参阅example implementation using JSON.NET。