我正在抓取一些数据并尝试使用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());

07-28 09:32