我有以下JSON:
{
"reviews": [
{
"reviewId": "123",
"authorName": "author",
"comments": [
{
"userComment": {
"text": "text",
"lastModified": {
"seconds": "1580461776",
"nanos": 1
},
"starRating": 5,
"reviewerLanguage": "GB",
"appVersionCode": "",
"appVersionName": "",
"thumbsUpCount": 0,
"thumbsDownCount": 0
}
}
]
}
]
}
由此,我想要访问的是starRating
(但有可能进行多次审阅),我设法将JSON正确地反序列化为C#对象,并在调试代码时进行了检查。
到目前为止,我有:
var appReview = JsonConvert.DeserializeObject<appData>(appJson);
var reviews = appReview.Reviews;
int reviewCount = reviews.Length;
for (int i = 0; i < reviewCount; i++)
{
Console.WriteLine(reviews[0].Comments[0].UserComment.StarRating);
}
但是,我不只是希望此特定评论的星级,因为将来会有更多评论和星级,因此我需要选择JSON中的所有评论并获得星级的平均值?因此,我不确定使用[0]
索引访问它们是否正确。希望我已经解释得足够好了-有人可以指出正确的方向吗?
如果您愿意使用linq,那么我建议您这样做:
var ratings = appReview.Reviews
.SelectMany(r => r.Comments.Select(c => c.UserComment.StarRating));
这应该使您获得评级列表。通过StarRating
从中选择进行工作,Comments
然后SelectMany
将阵列展平为单个阵列。
然后,您可以像这样使用平均值:
var average = ratings.Average();