我知道這個問題在 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.'
在這個特定的問題中,有一個答案試圖解決我遇到的同樣問題,但不幸的是我無法使其正常作業。
相信我,我已經嘗試了所有看起來適合這個問題的方法,但仍然無法解決,請幫助。我不會包括我用于此問題的其他解決方案的代碼,例如將其反序列化為自定義類,因為它會使一切變得更加混亂。我在 WinForms 專案中使用 Visual Studio 2022、.NET 6.0。
uj5u.com熱心網友回復:
您收到反序列化錯誤“...預期的 StartArray,得到了 StartObject。” 所以你不能將整個物件反序列化為 DataTable ,你只需要一個陣列部分。陣列部分從“藝術家”開始。因此,在決議整個物件后,您必須僅對“藝術家”部分進行反序列化。
試試這個。它在 Visual Studio 中進行了測驗
var jsonObject=JObject.Parse(json);
DataTable dt = jsonObject["artists"].ToObject<DataTable>();
uj5u.com熱心網友回復:
您是否嘗試從外部字典中提取串列?
dynamic jsonDict = JsonConvert.DeserializeObject(jsonString);
var jarrayString = JsonConvert.SerializeObject(jsonDict["artists"]);
var dt = JsonConvert.DeserializeObject<DataTable>(jarrayString);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392595.html
標籤:C# json 数据表 json.net json-反序列化
