Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中的JSON文件上转储文件列表#_C#_Json_Winforms - Fatal编程技术网

C# 在c中的JSON文件上转储文件列表#

C# 在c中的JSON文件上转储文件列表#,c#,json,winforms,C#,Json,Winforms,我正在学习编写JSON,我已经做到了: try { string path = @"C:\"; string[] dirs = Directory.GetFiles(path, "*.exe"); using (StreamWriter file = File.CreateText(@"filelist.json")) foreach (string dir

我正在学习编写JSON,我已经做到了:

        try
        {
            string path = @"C:\";
            string[] dirs = Directory.GetFiles(path, "*.exe");
            using (StreamWriter file = File.CreateText(@"filelist.json"))

                foreach (string dir in dirs)
                {
                    FolderFiles aFile = new FolderFiles
                    {
                        FileName = dir.ToString(),
                        FileType = Path.GetExtension(path + @"\" + dir.ToString())
                    };

                    JsonSerializer serializer = new JsonSerializer();
                    serializer.Serialize(file, aFile);
                }
            MessageBox.Show("Process Done");
        }
我试图在一个JSON文件中转储一个文件名列表,但是当我验证它时,它会说它无效,而且当我打开它时它只在一行上

JSON可以像顺序一样写入文件。 任何帮助都会很好,谢谢

电流输出:

{"FileName":"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.exe","FileType":".exe"}{"FileName":"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.vshost.exe","FileType":".exe"}
这是文件夹文件:

internal class FolderFiles {
    public string FileName { get; set; }
    public string FileType { get; set; }
}

在.NET中,无法使用现成的工具顺序写入JSON文件。您必须自己实现这一点,手动逐段写入文件

相反,只需构建包含文件夹路径数组的对象,将其序列化为JSON,然后一次性将其写入文件

实现该功能的示例代码,使用您提供的硬编码数据作为示例输出:

public class FolderFilesAggregate
{
    public IEnumerable<FolderFiles> FolderFiles { get; set; }
}

public class FolderFiles
{
    public string FileName { get; set; }
    public string FileType { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // get your folder files in any way you want to, I hardcoded it to simplify the example
        var folderFiles = new List<FolderFiles>
                          {
                              new FolderFiles
                              {
                                  FileName = @"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.exe",
                                  FileType = ".exe"
                              },
                              new FolderFiles
                              {
                                  FileName = @"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.vshost.exe",
                                  FileType = ".exe"
                              }
                          };

        var folderFilesAggregate = new FolderFilesAggregate
                                   {
                                       FolderFiles = folderFiles
                                   };

        // serialize your aggregate object
        var serializedFolderFilesAggregate = Newtonsoft.Json.JsonConvert.SerializeObject(folderFilesAggregate, Formatting.Indented);

        // write it to a file
        System.IO.File.WriteAllText(@"C:\output.json", serializedFolderFilesAggregate);
    }
}
公共类FolderFilesAggregate
{
公共IEnumerable文件夹文件{get;set;}
}
公共类文件夹文件
{
公共字符串文件名{get;set;}
公共字符串文件类型{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
//以任何方式获取文件夹文件,我对其进行了硬编码以简化示例
var folderFiles=新列表
{
新文件夹文件
{
FileName=@“C:\\Users\\Joko\\Documents\\visualstudio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.exe”,
FileType=“.exe”
},
新文件夹文件
{
FileName=@“C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.vshost.exe”,
FileType=“.exe”
}
};
var folderfilesagregate=新的folderfilesagregate
{
FolderFiles=FolderFiles
};
//序列化聚合对象
var serializedFolderFilesAggregate=Newtonsoft.Json.JsonConvert.SerializeObject(FolderFileAggregate,Formatting.Indented);
//将其写入文件
System.IO.File.WriteAllText(@“C:\output.json”,serializedFolderFilesAggregate);
}
}

无法使用.NET中的现成工具顺序写入JSON文件。您必须自己实现这一点,手动逐段写入文件

相反,只需构建包含文件夹路径数组的对象,将其序列化为JSON,然后一次性将其写入文件

实现该功能的示例代码,使用您提供的硬编码数据作为示例输出:

public class FolderFilesAggregate
{
    public IEnumerable<FolderFiles> FolderFiles { get; set; }
}

public class FolderFiles
{
    public string FileName { get; set; }
    public string FileType { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // get your folder files in any way you want to, I hardcoded it to simplify the example
        var folderFiles = new List<FolderFiles>
                          {
                              new FolderFiles
                              {
                                  FileName = @"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.exe",
                                  FileType = ".exe"
                              },
                              new FolderFiles
                              {
                                  FileName = @"C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.vshost.exe",
                                  FileType = ".exe"
                              }
                          };

        var folderFilesAggregate = new FolderFilesAggregate
                                   {
                                       FolderFiles = folderFiles
                                   };

        // serialize your aggregate object
        var serializedFolderFilesAggregate = Newtonsoft.Json.JsonConvert.SerializeObject(folderFilesAggregate, Formatting.Indented);

        // write it to a file
        System.IO.File.WriteAllText(@"C:\output.json", serializedFolderFilesAggregate);
    }
}
公共类FolderFilesAggregate
{
公共IEnumerable文件夹文件{get;set;}
}
公共类文件夹文件
{
公共字符串文件名{get;set;}
公共字符串文件类型{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
//以任何方式获取文件夹文件,我对其进行了硬编码以简化示例
var folderFiles=新列表
{
新文件夹文件
{
FileName=@“C:\\Users\\Joko\\Documents\\visualstudio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.exe”,
FileType=“.exe”
},
新文件夹文件
{
FileName=@“C:\\Users\\Joko\\Documents\\Visual Studio 2015\\Projects\\Research\\GetFilesFromFolder\\GetFilesFromFolder\\bin\\Debug\\GetFilesFromFolder.vshost.exe”,
FileType=“.exe”
}
};
var folderfilesagregate=新的folderfilesagregate
{
FolderFiles=FolderFiles
};
//序列化聚合对象
var serializedFolderFilesAggregate=Newtonsoft.Json.JsonConvert.SerializeObject(FolderFileAggregate,Formatting.Indented);
//将其写入文件
System.IO.File.WriteAllText(@“C:\output.json”,serializedFolderFilesAggregate);
}
}

您能提供预期输出文件内容的示例吗?您的实际预期非常混乱-您正在将一些JSON对象序列写入流中。。。结果显然不是JSON。。。也许您正在寻找JSON序列化
FolderFiles
的数组?您能提供预期输出文件内容的示例吗?您实际期望的内容非常混乱-您正在将一些JSON对象序列写入流中。。。结果显然不是JSON。。。也许您正在寻找JSON序列化
文件夹文件的数组