我正在使用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);
答案 0 :(得分:2)
您的parameterOptionsArray不是数组,而是列表列表。
问题是 parameterOptionsArray [index] 是一个List,而不是一个字符串。所以你应该使用AddRange()而不是Add()。
parameterOptionsArray.Foreach(parameteroption => options.AddRange(parameteroption));
答案 1 :(得分:1)
正如我在评论中所写,您只能在对象初始化程序中进行分配。因此,允许以下内容:
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());
答案 2 :(得分:0)
您似乎在parameterOptionsArray
中有一个锯齿状数组。您可以在此处使用SelectMany
。也许以下示例可以提供帮助:
string[][] parameterOptionsArray = new string[2][];
parameterOptionsArray[0] = new string[2];
parameterOptionsArray[0][0] = "1";
parameterOptionsArray[0][1] = "2";
parameterOptionsArray[1] = new string[2];
parameterOptionsArray[1][0] = "3";
parameterOptionsArray[1][1] = "4";
var testing = new {options = parameterOptionsArray.SelectMany(x => x).ToList()};
testing.options.ForEach(x => Console.WriteLine(x));