Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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# JSON上没有特定数据时出错_C#_Json_Gridview_Uwp - Fatal编程技术网

C# JSON上没有特定数据时出错

C# JSON上没有特定数据时出错,c#,json,gridview,uwp,C#,Json,Gridview,Uwp,我有一个JSON,如下所示: 在上面的JSON中,第一个数据有“image\u url”数据,而第二个数据没有“image\u url”数据 在gridview中使用JSON。我有一个问题,那就是:如果您没有JSON上的“image_url”数据,它将出现如下错误: XAML: 代码: 试试看 { loading.Visibility=可见性.Visibility; 字符串urlPath1=”http://.../results.json?module=listing&page=2&to

我有一个JSON,如下所示:

在上面的JSON中,第一个数据有“image\u url”数据,而第二个数据没有“image\u url”数据

在gridview中使用JSON。我有一个问题,那就是:如果您没有JSON上的“image_url”数据,它将出现如下错误:

XAML:


代码:

试试看
{
loading.Visibility=可见性.Visibility;
字符串urlPath1=”http://.../results.json?module=listing&page=2&token=3f63-dc43-c8d5-eb45-8cbf-b72d-9d98-800f”;
var httpClient1=新的HttpClient(新的HttpClientHandler());
var values1=新列表
{
};
HttpResponseMessageResponse1=等待httpClient1.GetAsync(urlPath1);
response1.EnsureSuccessStatusCode();
如果(!response1.issucessStatusCode)
{
busyIndicator.IsActive=false;
请求异常();
}
字符串jsonText1=await response1.Content.ReadAsStringAsync();
JsonObject jsonObject1=JsonObject.Parse(jsonText1);
JsonArray jsonData1=jsonObject1[“数据”].GetArray();
foreach(jsonData1中的JsonValue groupValue1)
{
JsonObject groupObject2=groupValue1.GetObject();
double id=groupObject2[“id”].GetNumber();
string title=groupObject2[“title”].GetString();
字符串地址=groupObject2[“地址”].GetString();
string phone=groupObject2[“phone”].GetString();
双重评级=groupObject2[“评级”].GetNumber();
字符串image_url=groupObject2[“image_url”].GetString();
ListingClass file1=新ListingClass();
file1.ID=Convert.ToInt32(ID);
file1.Title=Title;
file1.地址=地址;
file1.Phone=Phone;
file1.Rating=Convert.ToInt32(Rating);
file1.ImageURL=image\u url;
listingDatasource.Add(file1);
}
itemGridView.ItemsSource=listingDatasource;
busyIndicator.IsActive=false;
}
捕获(HttpRequestException-ex)
{
busyIndicator.IsActive=false;
请求异常();
}
我想如果没有“image_url”数据,图像不会显示(只有边框)。
如何处理它?

如果您想要一个简单的异常解决方案,您可以检查JsonObject是否有键以及与键关联的值是否为null,并将图像url设置为string。如果为null,则为空,如下所示

string image_url = groupObject2.ContainsKey("image_url") && groupObject2["image_url"] != null ? groupObject2["image_url"].GetString() : string.Empty;
否则,您可以使用以下代码将JSON反序列化到ListingClass集合

您必须添加对Nuget包“Newtonsoft.Json”的引用才能使此代码正常工作

//Other code of calling service..
string jsonText1 = await response1.Content.ReadAsStringAsync();

var jsonObj = JObject.Parse(jsonText1);

var data = jsonObj["data"].ToString();

var listingDatasource = JsonConvert.DeserializeObject<List<ListingClass>>(data);

itemGridView.ItemsSource = listingDatasource;
busyIndicator.IsActive = false;
//呼叫服务的其他代码。。
字符串jsonText1=await response1.Content.ReadAsStringAsync();
var jsonObj=JObject.Parse(jsonText1);
var data=jsonObj[“data”].ToString();
var listingDatasource=JsonConvert.DeserializeObject(数据);
itemGridView.ItemsSource=listingDatasource;
busyIndicator.IsActive=false;

JSON字符串为什么不直接反序列化到
ListingClass
class的集合中?这会将缺少属性的值设置为默认值。我使用ListingClass在gridview上显示。如何修复代码?我已经在下面发布了答案。如果您可以共享您正在处理的部分实际JSON,我可以提供更好的解决方案。以下是JSON的链接:(使用“数据”JSON数据)我无法安装Newtonsoft.JSON并显示错误消息:您如何尝试安装?这是一个nuget软件包。。。。。您共享的错误消息没有太多关于错误原因的信息。如果对您来说使用Newtonsoft.Json变得太复杂,我刚才在回答中提供了一个简单的解决方案。请参考它。我试图安装它,但安装不成功,出现了类似上面的错误消息。我必须替换字符串image\u url=groupObject2[“image\u url”]。GetString();字符串image\u url=groupObject2[“image\u url”]==null?string.Empty:groupObject2[“image_url”].ToString();但仍然会显示一条错误消息,并且网格视图上的所有图片都变为空(仅显示边框)
string image_url = groupObject2.ContainsKey("image_url") && groupObject2["image_url"] != null ? groupObject2["image_url"].GetString() : string.Empty;
//Other code of calling service..
string jsonText1 = await response1.Content.ReadAsStringAsync();

var jsonObj = JObject.Parse(jsonText1);

var data = jsonObj["data"].ToString();

var listingDatasource = JsonConvert.DeserializeObject<List<ListingClass>>(data);

itemGridView.ItemsSource = listingDatasource;
busyIndicator.IsActive = false;