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.
我正在使用 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.