2017-07-17 2 views
-4

Ich versuche, die JSON-Daten in eine CSV-Datei zu exportieren. Ich habe eine Funktion WriteReportToCSV() erstellt, um diese Aufgabe zu erledigen. Wenn ich versuche, mein Programm auszuführen, liest mein Code die Funktion nicht. Fehle ich etwas in meinem Code?Wie schreibe ich JSON-Objektdaten in eine CSV-Datei?

TestApp.cs:

namespace TestApp 
{ 
    class TestApp 
    { 
     public List<report> Reports { get; set; } 
     public List<worklog> worklogs { get; set; } 
     public List<answer> answers { get; set; } 

     public void HarvestRaken() 
     { 
      var rc = GetReports(); 

      if (rc == null) return; 

      rc.WriteReportToCSV(@"C:\Projects\TestApp\Report_Data.csv"); 

     } 

     public string token = "1abcdef3-k89x-3w574-3589-2957c29ki7m1"; 

     public reportcontainer GetReports() 
     { 

      Console.WriteLine("Reading Reports"); 

      reportcontainer result = null; 

      try 
      { 
       string url = "https://app.ticketappapp.com/api/v2/reports/?startDate=2017-06-07&endDate=2017-07-07&maxResults=10000&filters=project.id:279658&filters=project.id:279654&filters=project.id:279652"; 

       WebRequest request = WebRequest.Create(url); 

       request.Method = "GET"; 
       request.Headers.Add("Authorization", "Bearer " + token); 

       using (WebResponse response = request.GetResponse()) 
       { 
        using (Stream responstream = response.GetResponseStream()) 

        { 
         string sr = new StreamReader(responstream).ReadToEnd(); 

         reportcontainer rc = JsonConvert.DeserializeObject<reportcontainer>(sr); 
        } 
       } 
      } 

      catch (Exception ex) 
      { 

      } 

      return result; 
     } 

Project.cs:

namespace TestApp 
{ 

    public class reportcontainer 
    { 
     public List<report> reports { get; set; } 
     public string totalHits { get; set; } 

     public void WriteReportToCSV(string Filepath) 
     { 

      using (var sw = new StreamWriter(Filepath)) 
      { 

       foreach (report rep in this.reports) 

       { 
        sw.WriteLine("Reading Reports:"); 
        sw.WriteLine(" Reading:" + "," + rep.id + "," + rep.status + "," + rep.completed + "," + rep.date); 

       } 

       foreach (worklog wl in this.reports.SelectMany(r => r.worklogs)) 

       { 
        sw.WriteLine("Reading Worklogs:"); 
        sw.WriteLine(" Reading:" + "," + wl.id + "," + wl.subcontractor + "," + wl.hours + "," + wl.workerCount + "," + wl.workdesc); 

       } 

       foreach (answer ans in this.reports.SelectMany(r => r.answers)) 
       { 
        sw.WriteLine("Reading Survey:"); 
        sw.WriteLine(" Reading:" + "," + ans.id + "," + ans.question + "," + ans.questionid + "," + ans.FormattedAnswer + "," + ans.desc); 

       } 

      } 
     } 
    } 
+2

Was meinen Sie mit 'Wenn ich versuche, mein Programm auszuführen, liest mein Code die Funktion nicht. '? Meinst du, du hast 'HarvestRaken' vergessen? Oder etwas anderes? – mjwills

+0

@mjwills. Wenn ich Run drücke, fängt es an zu ernten, aber dann kehrt es zurück (rc == null) und dosiert nicht writeReporttoCSV(). Mein Problem ist, dass ich keine Daten in CSV schreiben kann. Ich verstehe nicht, was ich in meinem Code vermisse. – Rck7

+0

@ mjwills.Ich bin erfolgreich in der Lage, Objekt (sr) ohne Ausnahmen zu deserialisieren. Was meinst du damit, du hast gerade vergessen, der Ergebnisvariablen zuzuordnen? – Rck7

Antwort

0
reportcontainer rc = JsonConvert.DeserializeObject<reportcontainer>(sr); 

sollte geändert werden:

result = JsonConvert.DeserializeObject<reportcontainer>(sr); 

Weil Sie nie einen Wert result zuweisen, es ist immer null.

So WriteReportToCSV wird nie aufgerufen.

+0

Es funktionierte wie ein Zauber !!! Danke vielmals. – Rck7

Verwandte Themen