LINQ - 需要JSON帮助

时间:2011-04-01 16:01:09

标签: c# linq json.net

我在编写正确的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上的子值。” 我还需要一个查询来获取正文值。

谢谢, 杰夫

2 个答案:

答案 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");