gpt4 book ai didi

c# - 将带有数组的 JSON 反序列化为 DataTable?

转载 作者:行者123 更新时间:2023-12-05 02:35:47 30 4
gpt4 key购买 nike

我知道这个问题在 StackOverflow 中很受欢迎,但我似乎找不到合适的解决方案......我已经查看了几乎所有与此相关的问题,尝试了几乎所有方法,但没有一个工作...

看起来,我的问题是我的 JSON 中有数组,而 JSON.Net 反序列化器根本不喜欢这样。所以,我最后的选择是自己发布问题。

这是我的 JSON:

{"artists":
[
{"Name":"artsit",
"URL":"www.example.com",
"Desc":"very nice artist",
"Rating":5,
"NSFW":false,
"Tags":["good","epic"],
"fav":true
},
{"Name":"another artist",
"URL":"www.test.net",
"Desc":"super cool",
"Rating":3,
"NSFW":true,
"Tags":["digital","commissions"],
"fav":false
}
]
}

这是我的 C# 代码:

using StreamReader r = new StreamReader("C:\\path\\to\\json\\file.json");
string json = r.ReadToEnd();
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);

但是当我尝试运行它时,出现以下异常:

Newtonsoft.Json.JsonSerializationException: 'Unexpected JSON token when reading DataTable. Expected StartArray, got StartObject. Path '', line 1, position 1.'

this particular question ,有一个答案试图解决我遇到的同样问题,但不幸的是我无法让它工作。

相信我,我已经尝试了所有看起来适合这个问题的方法,但我仍然无法解决,请帮忙。我不会包括我用于此问题的其他解决方案的代码,例如将其反序列化为自定义类,因为这会使一切变得更加困惑。我在 WinForms 项目中使用 Visual Studio 2022、.NET 6.0。

最佳答案

您收到反序列化错误“...预期的 StartArray,得到 StartObject。”所以你不能反序列化到 DataTable 整个对象,你只需要一个数组部分。数组部分从“艺术家”开始。因此,在解析整个对象后,您只需反序列化“艺术家”部分。

试试这个。它在 Visual Studio 中进行了测试

var jsonObject=JObject.Parse(json);
DataTable dt = jsonObject["artists"].ToObject<DataTable>();

关于c# - 将带有数组的 JSON 反序列化为 DataTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70477055/

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