目前,我的代碼結構使用XmlDocument
加載Xml數據,然後使用SelectNodes
來遍歷重複項目列表。什麼是XML的XPath,SelectNodes,SelectSingleNode的JSON.NET等價物?
對於每個元素,我使用XmlNode.SelectSingleNode
來挑出字段元素。
我現在想用JSON.NET實現與以JSON形式發送給我的文檔相同的結果。答案可以是JSON.net以外的東西,只要它是C#可集成的。
目前,我的代碼結構使用XmlDocument
加載Xml數據,然後使用SelectNodes
來遍歷重複項目列表。什麼是XML的XPath,SelectNodes,SelectSingleNode的JSON.NET等價物?
對於每個元素,我使用XmlNode.SelectSingleNode
來挑出字段元素。
我現在想用JSON.NET實現與以JSON形式發送給我的文檔相同的結果。答案可以是JSON.net以外的東西,只要它是C#可集成的。
Json.NET具有SelectToken。它使用類似的DataBinder.Eval語法通過一個字符串表達式得到JSON:
JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}");
// get name token of first person and convert to a string
string name = (string)o.SelectToken("People[0].Name");
或者,如果你想選擇多個值:
JObject o = JObject.Parse("{'People':[{'Name':'Jeff','Roles':['Manager', 'Admin']}]}");
// get role array token of first person and convert to a list of strings
IList<string> names = (string)o.SelectToken("People[0].Roles").Select(t => (string)t).ToList();
您有可以映射JSON的對象層次結構嗎?您可以創建對象樹(即反序列化JSON),並使用LINQ的Where
,SelectMany
等。
感謝您的答覆馬克。具體來說,我使用twitter.com/status/mentions.json供稿。我希望將每個「狀態」傳遞給HTML Render,而無需知道(在構建時)它正在使用哪些字段,並允許它使用Json版本的SelectSingleNode來拉字段。一個LINQ的例子會幫助很多:) – 2009-11-08 23:13:14
啊,對。它不允許你使用任意字符串,如果這就是你的意思。它將需要每個場景的編碼。 – 2009-11-09 05:09:42
不錯!有沒有辦法以不區分大小寫的方式來做到這一點?像'JToken.GetValue(「something」,StringComparison.OrdinalIgnoreCase)'? – 2017-02-23 09:29:10