gpt4 book ai didi

c# - 在 C# 中反序列化动态命名的 JSON 对象(使用 JSON.Net 或其他方式)

转载 作者:太空狗 更新时间:2023-10-29 21:54:37 25 4
gpt4 key购买 nike

我有以下 JSON:

{
"aaaa": {
"name": "General Name",
"product": "book",
"host": "book.example.com",
"chapters": {
"bbbb": {
"name": "Chapter 1",
"page": "1",
"end_page": "25"
}
},
"categories" : {
"analysis":{
"Abbbb" : {
"name": "B Chapter",
"id" : "9001"
},
"Acccc" : {
"name": "C Chapter",
"id" : "9001"
},
"Adddd" : {
"name": "D Chapter",
"id" : "9001"
},
"Aeeee" : {
"name": "E Chapter",
"id" : "9001"
},
"Affff" : {
"name": "F Chapter",
"id" : "9001"
},
"Agggg" : {
"name": "G Chapter",
"id" : "9001"
}
},
"sources":{
"acks" : {
"name": "S. Spielberg",
"id" : "9001"
}
}
}
}
"yyyy": {
"name": "Y General Name",
"product": "Y book",
"host": "ybook.example.com",
...
}
"zzzz": {
"name": "Z General Name",
"product": "Z book",
"host": "zbook.example.com",
...
}

aaaa 的值, yyyy , 和 zzzz可以是任何字符串,并且可以有任意数量。

我需要提取所有 [aaaa|yyyy|zzz].categories.analysis值。也就是说,我需要以 Dictionary<string, string> 结束。 object 名称(例如 AbbbbAcccc 等)和 ID,忽略 name字符串。

例如, [阿布布,9001] [Acccc, 9001] [添加, 9001] ... [Zaaaa, 9001]

我从事此工作的时间太长了,感觉好像遗漏了一些明显的东西。我试过 JSON.net 和 native 序列化。对于我使用过的所有其他语言,这是一项微不足道的任务。

我已经接近这样的事情了:

var ajsonObject = JsonConvert.DeserializeObject<dynamic>(jsonString);
var oasearch_categories = ajsonObject.aaaa.categories.analysis;

但是,aaaa可以是任何字符串,所以我不确定如何动态引用它。

最佳答案

花了一段时间,但我想通了。我的要求与原来的问题略有不同......我的最终结果需要一个列表字典,所以我最终会得到一个像这样的字典:

DICT[ {"9001", ["Abbbb", "Acccc", "Adddd", ...]}, {"9002", ["Zbbbb, Zdddd", ...]}, etc. ]
| key | | value | | key | | value |

这是结果:

Dictionary<string, List<string>> idsAndTheirNames = new Dictionary<string, List<string>>();

try
{
var ajsonObject = JsonConvert.DeserializeObject<dynamic>(JSONstring);

foreach (var child in ajsonObject.Children())
{
foreach (var product in child.Children())
{
var categories = product.categories.analysis;

foreach (var category in categories.Children())
{
foreach (var subcat in category)
{
List<string> name = idsAndTheirNames[(string)subcat.id]; //e.g., "9001"

if (name == null) name = new List<string>();

name.Add(category.Name); //e.g., "Abbbb"
idsAndTheirNames[(string)subcat.id] = name; //"9001" -> ["Abbbb", "Acccc", etc.]

System.Diagnostics.Debug.WriteLine((string)category.Name); //"Abbbb"
System.Diagnostics.Debug.WriteLine((string)subcat.name); //"Chapter B"
System.Diagnostics.Debug.WriteLine((string)subcat.id); //"9001"
}
}
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("JSON ERROR: " + ex.Message);
}

关于c# - 在 C# 中反序列化动态命名的 JSON 对象(使用 JSON.Net 或其他方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15227208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com