2016-05-10 11 views
2

このコードを使用して、2dオブジェクト配列のデータをメモリストリームにコピーしています。メモリストリームには、2次元配列から読み取られたデータの数が表示されます。しかし、結局私は空の文字列を取得しています。なぜ私は理解できません。ただし、soapformatterを使用すると、文字列は空ではありませんが、soap形式で囲まれているため便利ではありません。 ここに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 
    }