2016-09-04 6 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ファイルにファイル名のリストをダンプしようとしているが、私午前それが無効であることを確認し、それを開いたときにも1行にしか表示されません。

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にシリアル化し、一度にすべてファイルに書き込んでください。

それを実装するためのExamplaryコード、あなたは出力例として提供してきましたハードコードされたデータで:

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); 
    } 
} 
関連する問題