1
votes

L'aide csv de l'API Web asp.net l'écriture dans le flux ne fonctionne pas

Ma condition initiale est de permettre à l'utilisateur de télécharger un fichier à partir de la liste d'objets pour cela j'ai trouvé cette solution https://stackoverflow.com / a / 49207997/11178128 ,

Mais le problème est que quand il s'agit de cette ligne

List<Device> devices;

    using (StreamReader r = new StreamReader(String.Format(@"{0}\deviceList.json", savefilePath)))
    {
      string json = r.ReadToEnd();
      devices = JsonConvert.DeserializeObject<List<Device>>(json);
    }

    byte[] bin;
    //String.Format(@"{0}\devices.csv", savefilePath)
    using (MemoryStream stream = new MemoryStream())
    using (TextWriter textWriter = new StreamWriter(stream))
    using (CsvWriter csv = new CsvWriter(textWriter))
    {
      csv.Configuration.ShouldQuote = (field, context) => false;

      csv.WriteRecords(devices);
      bin = stream.ToArray();
    }

il n'y a pas de flux écrits dessus. Ainsi, le bac est un tableau vide. Quel pourrait être le problème?

De plus, je mets mon API Web à disposition via un service Windows. Et pour une raison quelconque, System.Web.HttpContext.Current.Response me donne null. une idée pourquoi cela peut être? Merci d'avance.

Voici le code que j'ai jusqu'à présent

bin = stream.ToArray();


4 commentaires

Bonjour, étant donné que la méthode .ToArray fonctionne probablement correctement, le problème est susceptible de se trouver dans le reste de votre code. Veuillez modifier votre question et nous fournir plus de détails sur le code :-)


@Stefan Hey merci pour la réponse rapide. ouais j'ai mis à jour mon code ici.


Hmm ... il me manque quelque chose; autant que je peux voir cela devrait fonctionner.


@Stefan ouais a trouvé la solution. J'ai dû vider le StreamWriter. Posté la réponse ci-dessous. Merci pour la réponse.


3 Réponses :



0
votes

En fait, après un peu de difficulté, j'ai trouvé que cette ligne me manquait.

  byte[] data;
  using (MemoryStream stream = new MemoryStream())
  using (TextWriter textWriter = new StreamWriter(stream))
  using (CsvWriter csv = new CsvWriter(textWriter))
  {
    csv.Configuration.RegisterClassMap<DeviceMap>();
    csv.Configuration.ShouldQuote = (field, context) => false;

    csv.WriteRecords(values);
    textWriter.Flush();
    data = stream.ToArray();
  }

  return data;

Comme mentionné dans la réponse ci-dessous, j'ai dû vider l'objet textWriter afin d'écrire dans le fichier . Voici le code de travail.

textWriter.Flush();


0 commentaires

0
votes
 using (var ms = new MemoryStream())
            {
                using (var writer = new StreamWriter(ms))
                using (var csv = new CsvWriter(writer))
                {
                    csv.WriteRecords(dbresponse);
                } // the closing tag here is important!!It flush the streamwriter
                 ms.ToArray(); // or ms.GetBuffer()
            }
Now the ms.ToArray() will contain the data from csvHelper

0 commentaires