2016-09-04 41 views
0

我學習寫JSON,我已經做到了這一點:傾倒在C#中的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"} 

這是FolderFiles:

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

你能提供預期的輸出文件內容的例子嗎? –

+1

非常令人困惑的是你真正期望的 - 你正在編寫一些JSON對象序列到流...結果顯然不會是JSON ...也許你正在尋找JSON序列化的'FolderFiles'數組? –

回答

2

這是不可能使用出來的現成工具寫入JSON文件依次在.NET中。你必須自己實現,手動逐個寫入文件。

相反,只需構建包含文件夾路徑數組的對象,將其序列化爲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); 
    } 
}