我正在尝试使用LINQ to JSON使用http://james.newtonking.com/json(JSON.NET)框架创建JSON对象。
基本上我试图从IEnumerable输出创建一个特定的结构。有类似产品的东西 - >实际,预测,目标
LINQ to XML语句工作正常,我可以看到结果。这是由于LINQ to XML中的延迟执行和延迟评估吗?如果是,我该如何解决呢。
这就是我的LINQ to XML方法的样子
IEnumerable resultSet = (xmlDoc.Root.Descendants(ns + "Row").Select(result => new
{
MonthYearShortName = (DateTime)result.Element(ns + "Column0"),
Product = (String)result.Element(ns + "Column1"),
Actual = (decimal)result.Element(ns + "Column2"),
Forecast = (decimal)result.Element(ns+"Column3"),
Target = (decimal)result.Element(ns + "Column4"),
}));
这是我的LINQ to JSON。我使用的示例来自http://james.newtonking.com/json/help/index.html?topic=html/CreatingLINQtoJSON.htm
JObject rss =
resultSet.Select(p => new JObject(p.Product,
new JProperty("MonthYearShortName", p.MonthYearShortName),
new JProperty("Actual", p.Actual),
new JProperty("Forecast", p.Forecast),
new JProperty("Target", p.Target)));
Console.WriteLine(rss.ToString());
当我执行LINQ to JSON语句时,我收到以下错误消息
Error 5 'System.Collections.IEnumerable' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'System.Collections.IEnumerable' could be found
我的使用
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Extensions = System.Xml.Linq.Extensions;
不确定为什么我无法在第二个LINQ to JSON语句中执行select。
任何帮助都会很棒。
谢谢!
答案 0 :(得分:2)
Select扩展方法是在通用IEnumerable<T>
接口上定义的(不是非泛型IEnumerable
)。
要编译代码,您需要先调用Cast<>()
JObject rss =
resultSet.Cast<XElement>().Select(p => new JObject(p.Product,
new JProperty("MonthYearShortName", p.MonthYearShortName),
new JProperty("Actual", p.Actual),
new JProperty("Forecast", p.Forecast),
new JProperty("Target", p.Target)));
Console.WriteLine(rss.ToString());
(或以其他方式转换为通用IEnumerable<resultSet>
)
答案 1 :(得分:0)
如果您尝试获取JSON
字符串,则此代码应该有效:
var resultSet = (xmlDoc.Root.Descendants("Row").Select(result => new
{
MonthYearShortName = (DateTime)result.Element(ns + "Column0"),
Product = (String)result.Element("Column1"),
Actual = (decimal)result.Element("Column2"),
Forecast = (decimal)result.Element("Column3"),
Target = (decimal)result.Element("Column4"),
}));
var json = JsonConvert.SerializeObject(resultSet);
Console.WriteLine(json);