最近我接觸了JSON決議,我想知道,是否有可能完全動態地加載JSON檔案中的所有內容?我所說的動態加載,是指在不知道任何鍵的情況下加載JSON檔案的所有值,也就是說,我不能做下面的代碼:
string contents = File.ReadAllText("SomeJsonFile.txt"/span>) 。
JObject obj = JObject.Parse(contents)。
var value = obj["SomeKey"/span>]。
我之所以不能執行上面的代碼,是因為這將要求應用程式提前知道密鑰。
我的目標是能夠加載任何 JSON 檔案,并從所述 JSON 檔案中檢索所有值。我希望能夠加載嵌套值以及根值,所有這些都不需要知道鍵。 有什么辦法可以做到這一點嗎?如果你需要更多的資訊,請不要猶豫地問。
我想使用這些資料的方法是,首先,將一個文本框與每個鍵的字串版本系結。然后我將動態地將文本框添加到 FlowLayoutPanel 中,我還希望用戶能夠改變這些資料,并且 JSON 也將隨之改變。
請幫助。
uj5u.com熱心網友回復:
如果你不知道你要的鍵是什么,你可以使用Json.NET的JArray來動態訪問這個類。
請看答案中的實體實體和用法:
uj5u.com熱心網友回復:
假設JSON是一個物件而不是一個陣列,你可以使用Json.NET將json字串反序列化為一個IDictionary<string, object>
string myJsonString = File.ReadAllText("SomeJsonFile.txt"/span>) 。
var dataObj = JsonConvert.DeserializeObject<IDictionary<string, object>>(myJsonString)。
var topLevelKeys = dataObj.Keys。
你的原始問題已經表明你已經成功地將一個JSON字串決議為一個C#物件,而不知道鍵值。
看來你的實際問題是關于如何將 JObject 扁平化為某種可列舉的鍵/值對集合。對于這個問題,我請你參考這個主題的答案。 使用 c# 扁平化 Json
答案2看起來干凈多了:
string contents = File.ReadAllText("SomeJsonFile.txt"/span>) 。
var schemaObject = JObject.Parse(contents);
var values = schemaObject
.SelectTokens("$..*"/span>)
.Where(t => !t.HasValues)
.ToDictionary(t => t.Path, t => t.ToString())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331592.html
標籤:
下一篇:如何將“nextval('testing_thing_thing_id_seq'::regclass)”宣告為postgres表“testing_thing”中“thing_id”
