2016-05-10 5 views
2

Я использую этот код для копирования данных из массива объектов 2d в поток памяти. В потоке памяти отображается количество данных, которое было прочитано из массива 2d. Но в итоге я получаю пустую строку. Я не понимаю, почему. Однако, используя soapformatter, строка не пуста, но она заключена в формат мыла, поэтому это не полезно. Вот код с BinaryFormatter.Поток памяти с 2d-массивом

 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

Вы не можете сериализацию массива, а затем ожидать, что она возвращает строку. Форматировщик хранит больше, чем просто фактическое содержимое массива. Я подозреваю, что вы на самом деле хотите просто поместить значения массива в строку, поэтому вам не следует использовать бинарный форматировщик. – MicroVirus

+0

Спасибо. Что мне тогда использовать? Как получить значения из массива объектов 2d в строку? Пожалуйста, помогите. – automationFormation

+0

Это зависит от того, нужно ли знать определение 'valueArray', так что вы можете изменить его в своем вопросе? – MicroVirus

ответ

0

Я думаю, вы должны использовать XmlSerializer следующим образом:

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 
    } 
Смежные вопросы