我正在抓取一些数据并尝试使用c#newtonsoft.Json将抓取的数据写入json文件
在.ToDictionary函数中编写foreach以及无法对.ToDictionary函数进行索引++时,我陷入了困境。
被注释的代码显示了我正在尝试做的事情。
提前致谢。
我的课:
public class JsonParametersData
{
public bool required { get; set; }
public bool list { get; set; }
public List<string> options { get; set; }
}
我的数组
var jsonData = new List<Dictionary<string, Dictionary<string, JsonParametersData>>>();
var moduleParameters = new List<string>();
var parameterOptionsArray = new List<List<string>>();
var parameterOptions = new List<string>();
var requiredArray = new List<bool>();
var listArray = new List<bool>();
string moduleName = item.Attributes["href"].Value.Replace("_module.html", "");
被注释的代码显示了我正在尝试做的事情。
int index = 0;
jsonData.Add(new Dictionary<string, Dictionary<string, JsonParametersData>>()
{
{
moduleName,
moduleParameters
.ToDictionary(n => n,
n => new JsonParametersData
{
required = requiredArray[index],
list = listArray[index],
options = new List<string>() { "option1", "option2" },
/*
foreach (var parameteroption in parameterOptionsArray[index])
{
options.Add(parameteroption);
}
index++;
*/
})
}
});
string json = JsonConvert.SerializeObject(jsonData.ToArray());
//write string to file
System.IO.File.WriteAllText(@"path", json);
最佳答案
正如我在注释中所写,您只能在对象初始化程序中进行赋值。因此允许以下内容:
var a = new { MyMember = anInstance }
虽然这不是:
var a = new { MyMember = anInstance, anInstance.DoSomething() };
那是您根本不应该使用Linq的情况之一,因为它导致的混乱更多,而无济于事。而是使用良好的老式循环:
int index = 0;
var innerDict = new Dictionary<string, JsonParametersData>();
foreach(var name in moduleParameters)
{
innerDict[name] = new JsonParametersData
{
required = requiredArray[index],
list = listArray[index],
options = new List<string>() { "option1", "option2" },
}
innerDict[name].Options.AddRange(parameterOptionsArray[index]);
index++;
}
var dict = new Dictionary<string, Dictionary<string, JsonParametersData>>();
dict[moduleName] = innerDict;
jsonData.Add(dict);
string json = JsonConvert.SerializeObject(jsonData.ToArray());