我在编写正确的LINQ语法时遇到问题。我之前使用过它,但从未使用过JSON文件。我通过搜索和试验此处和其他站点中的示例创建了以下代码。我想我很亲密,但似乎无法弄明白。我正在使用vs2010 C#,目标.net 4,引用了Newtonsoft.Json和Newtonsoft.Json.Linq。
我需要能够从此文件中获取from.number和body。
{ “信息”: { “至”: { “num”:“7891234567”, “名字”:“简·多伊” }, “身体”:“你好”, “from”:{ “num”:“1231234567”, “名字”:“John Doe” }, “type”:0, “dateTime”:1301493974000 } }
var jObj = JObject.Parse(jFile);
var pNum = from msg in jObj["message"]["from"].Children()
select (string)msg;
foreach(var n in pNum)
{
Console.WriteLine(n);
}
上面的代码会打印from.num值和from.name值。我正在寻找num值,而不是两者。我不太确定如何隔离我想要的价值。
我试过......
select (string)msg["num"];
没有成功。我收到错误“无法访问Newtonsoft.Json.Linq.JProperty上的子值。” 我还需要一个查询来获取正文值。
谢谢, 杰夫
答案 0 :(得分:2)
这应该有效:
string json = "{ \"message\": { \"to\": { \"num\": \"7891234567\", \"name\": \"Jane Doe\" }, \"body\": \"Hello\", \"from\": { \"num\": \"1231234567\", \"name\": \"John Doe\" }, \"type\": 0, \"dateTime\": 1301493974000 } }";
JavaScriptSerializer js = new JavaScriptSerializer();
dynamic foo = js.Deserialize<dynamic>(json);
var message = new {Num = foo["message"]["from"]["num"], Body = foo["message"]["body"]};
Console.WriteLine("{0}: {1}", message.Num, message.Body);
Console.ReadLine();
为了将来的参考,我应该补充一点,JavaScriptSerializer在System.Web.Extensions程序集中。
答案 1 :(得分:0)
没有设置自己尝试这个,看看我提出的文档。你能试试看以下是否有效吗?
var pNum = from msg in jObj["message"]["from"]
select (string)msg.SelectToken("num");