【发布时间】:2021-07-21 19:37:04
【问题描述】:
我开始使用 c# 并反序列化 Json。在我的培训中,我学习了 Newtonsoft,但我想对 system.text.json 做同样的事情
有了这个json,我想选择
- 搜索产品 > 特色产品 和
- 搜索过的产品 > 产品详情
制作一个对象列表。
https://api.nvidia.partners/edge/product/search?page=1&limit=9&locale=fr-fr&category=GPU&gpu=RTX%203090,RTX%203080%20Ti,RTX%203080,RTX%203070%20Ti,RTX%203070,RTX%203060%20Ti,RTX%203060&gpu_filter=RTX%203090~12,RTX%203080%20Ti~7,RTX%203080~16,RTX%203070%20Ti~3,RTX%203070~18,RTX%203060%20Ti~8,RTX%203060~2,RTX%202080%20SUPER~1,RTX%202080~0,RTX%202070%20SUPER~0,RTX%202070~0,RTX%202060~6,GTX%201660%20Ti~0,GTX%201660%20SUPER~9,GTX%201660~8,GTX%201650%20Ti~0,GTX%201650%20SUPER~3,GTX%201650~17
类
public class CarteGraphique
{
public string displayName { get; set; }
public string prdStatus { get; set; }
public List<Retailer> retailers { get; set; }
}
使用 Newtonsoft,我执行以下操作:
牛顿软件
JObject jsonParse = JObject.Parse(json);
IList<CarteGraphique> products = new List<CarteGraphique>();
IList<JToken> productDetailsParse = jsonParse["searchedProducts"]["productDetails"]
.Children()
.Where(n => n["isFounderEdition"].Value<bool>() == true)
.ToList();
var featuredProductParse = jsonParse["searchedProducts"]["featuredProduct"];
foreach (JToken item in productDetailsParse)
{
CarteGraphique result = item.ToObject<CarteGraphique>();
products.Add(result);
}
var featuredProduct = featuredProductParse.ToObject<CarteGraphique>();
products.Add(featuredProduct);
foreach (var item in products)
{
Console.WriteLine(item.DisplayName);
}
我想用 System.Text.Json 做到这一点...但我不知道如何选择 json 部分“productDetails”以将其添加到对象列表中。
System.text.json
var listGpu = new List<CarteGraphique>();
var jsonParse = JsonDocument.Parse(json);
var jsonFilter = jsonParse.RootElement
.GetProperty("searchedProducts")
.GetProperty("featuredProduct")
.GetRawText();
var jsonObj = JsonSerializer.Deserialize<CarteGraphique>(jsonFilter);
listGpu.Add(jsonObj);
foreach (var item in listGpu)
{
Console.WriteLine(item.displayName);
}
你能帮帮我吗? 对于我这个初学者来说,文档不清楚。
【问题讨论】:
-
System.Text.Json区分大小写,因此您需要使用new JsonSerializerOptions { PropertyNameCaseInsensitive = true },请参阅dotnetfiddle.net/nMaXSh。和JsonSerializer.Deserialize fails。这就是为什么CarteGraphique.PrdStatus没有成功反序列化的原因。那是你唯一的问题吗?从您的问题来看,尚不清楚您的问题到底出在哪里。 -
感谢您的回答,抱歉粘贴错误,我正在编辑我的课程。不,不是那样,我只想获取“productDetails”并反序列化以添加到列表中,就像我使用 Newtonsoft 的示例
标签: c# json system.text.json