2012-02-07 7 views
3

次のコードサンプルは、ファイルをシリアライズ/逆シリアル化する方法を示しています。どのように私はファイルの代わりに変数にシリアル化するためにこれを変更できますか? (変数がファイル名の代わりに読み書きメソッドに渡されると仮定します)。変数にシリアライズする方法

public static void WriteObject(string fileName) 
    { 
     Console.WriteLine(
      "Creating a Person object and serializing it."); 
     Person p1 = new Person("Zighetti", "Barbara", 101); 
     FileStream writer = new FileStream(fileName, FileMode.Create); 
     DataContractSerializer ser = 
      new DataContractSerializer(typeof(Person)); 
     ser.WriteObject(writer, p1); 
     writer.Close(); 
    } 

    public static void ReadObject(string fileName) 
    { 
     Console.WriteLine("Deserializing an instance of the object."); 
     FileStream fs = new FileStream(fileName, 
     FileMode.Open); 
     XmlDictionaryReader reader = 
      XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); 
     DataContractSerializer ser = new DataContractSerializer(typeof(Person)); 

     // Deserialize the data and read it from the instance. 
     Person deserializedPerson = 
      (Person)ser.ReadObject(reader, true); 
     reader.Close(); 
     fs.Close(); 
     Console.WriteLine(String.Format("{0} {1}, ID: {2}", 
     deserializedPerson.FirstName, deserializedPerson.LastName, 
     deserializedPerson.ID)); 
    } 
+0

どのようなタイプの変数を渡したいですか?文字列? MemoryStream? – Kibbee

+0

あなたはどのような変数を覚えていますか? 'byte []'? – svick

+0

'p1'は変数で、必要なものはすべて保持します。 –

答えて

7

あなたは、メモリストリームにFileStreamを変更し、byte[]にそれをダンプすることができます。

public static byte[] WriteObject<T>(T thingToSave) 
{ 
    Console.WriteLine("Serializing an instance of the object."); 
    byte[] bytes; 
    using(var stream = new MemoryStream()) 
    { 
     var serializer = new DataContractSerializer(typeof(T)); 
     serializer.WriteObject(stream, thingToSave); 
     bytes = new byte[stream.Length]; 
     stream.Position = 0; 
     stream.Read(bytes, 0, (int)stream.Length); 
    } 
    return bytes; 

} 

public static T ReadObject<T>(byte[] data) 
{ 
    Console.WriteLine("Deserializing an instance of the object."); 

    T deserializedThing = default(T); 

    using(var stream = new MemoryStream(data)) 
    using(var reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas())) 
    { 
     var serializer = new DataContractSerializer(typeof(T)); 

     // Deserialize the data and read it from the instance. 
     deserializedThing = (T)serializer.ReadObject(reader, true); 
    } 
    return deserializedThing; 
} 
+0

あなたはMemoryStreamが良い/悪いと思いますか? –

+0

何よりも良いか悪いですか?ファイルに書き込む?もちろん。 – scottm

+0

byte []バッファを使うよりも良いか悪いですか? –