如何快速获取从 HttpClient 返回的 JSON 的部分属性?
How to get partial properties from JSON returned from HttpClient fast?
我在下面的 C# .NET 5 程序中有一个 JSON 片段 here 取自 HttpClient
class。
简化JSON:
{
"Restaurants":
[
{
"Id": 138898,
"Name": "Willesborough Cafe",
"Rating": {
"Count": 76,
"Average": 5.92,
"StarRating": 5.92
},
"CuisineTypes": [
{
"Id": 92,
"IsTopCuisine": false,
"Name": "Breakfast",
"SeoName": "breakfast"
}, {
"Id": 106,
"IsTopCuisine": true,
"Name": "British",
"SeoName": "british"
}
],
"Cuisines": [
{
"Name": "Breakfast",
"SeoName": "breakfast"
}, {
"Name": "British",
"SeoName": "british"
}
]
}
]
}
当前代码:
dynamic result =
await _httpClient.GetFromJsonAsync<dynamic>(url);
// dynamic result2 = JsonConvert.DeserializeObject<dynamic>(result); // slow
dynamic result2 = JObject.Parse(result); // slow
我有兴趣从 Restaurants
数组中获取以下每家餐厅的信息:
- 姓名
- 评分
- 餐饮类型
我使用 dynamic
因为我不需要基于 JSON 结构创建多个 class 并且我不需要更改我的 class 如果JSON 结构更改。
我试过了 JsonConvert.DeserializeObject
& JObject.Parse
.
但是,Visual Studio 调试在这两种方法中停留了很长时间
从巨大的 JSON 响应中获取部分属性的推荐方法是什么?
谢谢
您可以创建一个具有命名属性的 class
class Restaurant
{
public string Name { get; set; }
public Rating Rating { get; set; }
public List<CuisineType> CuisineTypes { get; set; }
}
class Rating
{
public int Count { get; set; }
public decimal Average { get; set; }
public decimal StarRating { get; set; }
}
class CuisineType
{
public int Id { get; set; }
public bool IsTopCuisine { get; set; }
public string Name { get; set; }
public string SeoName { get; set; }
}
并将 json 反序列化为 Restaurant 的实例,然后您就有了所需的类型。而已。
您需要有一个 class 包含餐厅列表,因为您必须有一个 属性 与您的 json 对象
相同的名称
class RestaurantList { public List<Restaurant> Restaurants {get; set;} }
现在您需要一个代码来将 json 的部分绑定到对象
var restaurants = JsonConvert.DeserializeObject<RestaurantList>(result);
我在下面的 C# .NET 5 程序中有一个 JSON 片段 here 取自 HttpClient
class。
简化JSON:
{
"Restaurants":
[
{
"Id": 138898,
"Name": "Willesborough Cafe",
"Rating": {
"Count": 76,
"Average": 5.92,
"StarRating": 5.92
},
"CuisineTypes": [
{
"Id": 92,
"IsTopCuisine": false,
"Name": "Breakfast",
"SeoName": "breakfast"
}, {
"Id": 106,
"IsTopCuisine": true,
"Name": "British",
"SeoName": "british"
}
],
"Cuisines": [
{
"Name": "Breakfast",
"SeoName": "breakfast"
}, {
"Name": "British",
"SeoName": "british"
}
]
}
]
}
当前代码:
dynamic result =
await _httpClient.GetFromJsonAsync<dynamic>(url);
// dynamic result2 = JsonConvert.DeserializeObject<dynamic>(result); // slow
dynamic result2 = JObject.Parse(result); // slow
我有兴趣从 Restaurants
数组中获取以下每家餐厅的信息:
- 姓名
- 评分
- 餐饮类型
我使用 dynamic
因为我不需要基于 JSON 结构创建多个 class 并且我不需要更改我的 class 如果JSON 结构更改。
我试过了 JsonConvert.DeserializeObject
& JObject.Parse
.
但是,Visual Studio 调试在这两种方法中停留了很长时间
从巨大的 JSON 响应中获取部分属性的推荐方法是什么?
谢谢
您可以创建一个具有命名属性的 class
class Restaurant
{
public string Name { get; set; }
public Rating Rating { get; set; }
public List<CuisineType> CuisineTypes { get; set; }
}
class Rating
{
public int Count { get; set; }
public decimal Average { get; set; }
public decimal StarRating { get; set; }
}
class CuisineType
{
public int Id { get; set; }
public bool IsTopCuisine { get; set; }
public string Name { get; set; }
public string SeoName { get; set; }
}
并将 json 反序列化为 Restaurant 的实例,然后您就有了所需的类型。而已。 您需要有一个 class 包含餐厅列表,因为您必须有一个 属性 与您的 json 对象
相同的名称class RestaurantList { public List<Restaurant> Restaurants {get; set;} }
现在您需要一个代码来将 json 的部分绑定到对象
var restaurants = JsonConvert.DeserializeObject<RestaurantList>(result);