Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化API响应时发生强制转换异常_C#_Rest_Api_Object_Null - Fatal编程技术网

C# 反序列化API响应时发生强制转换异常

C# 反序列化API响应时发生强制转换异常,c#,rest,api,object,null,C#,Rest,Api,Object,Null,当我进行API调用时,我得到以下响应 { "AdPlanId": 1, "PlanName": "SWIFT Test plan", "Description": "Descritpion for Test plan", "NoVideosToPlay": 2, "NoBannersToShow": 3, "MinTimeBetweenAds": 5, "MaxTimeBetwenAds": 15, "MinDataConsumption": 25, "MaxDataConsumption":

当我进行API调用时,我得到以下响应

{
"AdPlanId": 1,
"PlanName": "SWIFT Test plan",
"Description": "Descritpion for Test plan",
"NoVideosToPlay": 2,
"NoBannersToShow": 3,
"MinTimeBetweenAds": 5,
"MaxTimeBetwenAds": 15,
"MinDataConsumption": 25,
"MaxDataConsumption": 100,
"Created": "2017-01-24T16:35:13.042211",
"LastModified": "2017-01-24T16:35:13.042712",
"MarkedForDeletion": null,
"MarkedDeletedDate": null
}
然后我尝试使用C代码反序列化

var response=wait client.GetAsync(uri);
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
返回新的DBResult(true,JsonConvert.DeserializeObject(content));
}
我在这一行得到一个“空对象不能转换为值类型”异常 返回新的DBResult(true,JsonConvert.DeserializeObject(content));
请问我做错了什么?

我认为您应该尝试为您正在接收的对象类型创建一个代理类,并编写它,而不是。它基本上无法将其转换为T型

创建一个类似这样的代理类,然后用

class ClassName{
  string AdPlanId {get; set;}
  string PlanName {get; set;}
  string Description {get; set;}
  string NoVideosToPlay {get; set;}
  string NoBannersToShow {get; set;}
  string MinTimeBetweenAds {get; set;}
  string MaxTimeBetwenAds {get; set;}
  string MinDataConsumption {get; set;}
  string MaxDataConsumption {get; set;}
  string Created {get; set;}
  string LastModified {get; set;}
  string MarkedForDeletion {get; set;}
  string MarkedDeletedDate {get; set;}
}
然后像这样做:

var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
 var content = await response.Content.ReadAsStringAsync();
 return new DBResult<ClassName>(true, JsonConvert.DeserializeObject<ClassName>(content));
}
var response=wait client.GetAsync(uri);
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
返回新的DBResult(true,JsonConvert.DeserializeObject(content));
}

调试时,JsonConvert.DeserializeObject(内容)的结果是什么?可能为空。。您应该显示
content
的值是什么,类型是什么
T
您需要在“returnnewdbresult(true,JsonConvert.DeserializeObject(content));@GiladGreen“content”的值是{“AdPlanId”:1,“PlanName”:“SWIFT Test plan”,“Description”:“测试计划说明”,“NoVideosToPlay”:2,“NoBannersToShow”:3,“MintTimeBetweeAnds”:5,“MaxTimeBetweeAds”:15,“MinDataConsumption”:25,“MaxDataConsumption”:100,“Created”:“2017-01-24T16:35:13.042211”,“LastModified”:“2017-01-24T16:35:13.042712”,“MarkedForDeletion”:“MarkedDeletedDate”:”“}在那一行。我想这会解决这个问题,但我有其他调用使用该通用方法进行调用,因此您的解决方案将破坏一切。然后最好将其转换为如下内容:JObject JObject=JObject.Parse(jsonString);参考
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
 var content = await response.Content.ReadAsStringAsync();
 return new DBResult<ClassName>(true, JsonConvert.DeserializeObject<ClassName>(content));
}