C# 在c中的JSON文件上转储文件列表#
我正在学习编写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
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序列化文件夹文件的数组
?