2016-05-10 12 views
2

Ich verwende diesen Code, um Daten aus einem 2d-Objekt-Array in den Speicher-Stream zu kopieren. Der Speicherstrom zeigt die Anzahl der Daten an, die aus dem 2d-Array gelesen wurden. Aber am Ende bekomme ich eine leere Saite. Ich kann nicht verstehen warum. Bei Verwendung des SoapFormatters ist die Zeichenfolge jedoch nicht leer, sondern ist im Soap-Format eingeschlossen, was nicht sinnvoll ist. Hier ist der Code mit BinaryFormatter.Speicher-Stream mit 2d-Array

 Worksheet sheet = (Worksheet)workBookIn.Sheets[1]; 
     Range excelRange = sheet.UsedRange; 
     object[,] valueArray = (object[,])excelRange.get_Value(
      XlRangeValueDataType.xlRangeValueDefault); 
     using (var ms = new MemoryStream()) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 
      //valueArray = 2d object array 
      formatter.Serialize(ms, valueArray); 
      ms.Position = 0; 
      return Encoding.UTF8.GetString(ms.ToArray()); 
     } 
+0

Sie können kein Array serialise und dann erwarten, dass es einen String zurück. Mehr als nur der tatsächliche Inhalt des Arrays wird vom Formatierer gespeichert. Ich vermute, was Sie eigentlich wollen, ist nur die Werte des Arrays in eine Zeichenfolge zu setzen, also sollten Sie keinen binären Formatierer verwenden. – MicroVirus

+0

Vielen Dank. Was soll ich dann verwenden? Wie bekomme ich die Werte aus dem 2d-Objekt-Array in eine Zeichenfolge? Bitte helfen Sie mit. – automationFormation

+0

Das hängt davon ab, dass wir die Definition von 'valueArray' kennen müssen, also könntest du es in deine Frage bearbeiten? – MicroVirus

Antwort

0

Ich glaube, Sie müssen XmlSerializer werden wie folgt verwendet:

Worksheet sheet = (Worksheet)workBookIn.Sheets[1]; 
    Range excelRange = sheet.UsedRange; 
    object[,] valueArray = (object[,])excelRange.get_Value(
     XlRangeValueDataType.xlRangeValueDefault); 

    XmlSerializer xs = new XmlSerializer(valueArray.GetType()); 

    using(StringWriter sw = new StringWriter()) 
    using(XmlWriter writer = XmlWriter.Create(sw)) 
    { 
     xs.Serialize(writer, valueArray); 
     var xml = sw.ToString(); // Your XML 
    }