2010-01-04 1 views
1

현재 자신의 클래스 객체를 많이 포함하고있는 객체를 직렬화해야합니다. 하지만 문제는 파일에 저장하고 메모리 스트림으로 가져 오려고하지 않습니다. 개체를 스트림으로 직접 직렬화 할 수있는 방법이 있습니까?직렬화 문제가

나는 시알 화를 위해 BinaryFormatter를 사용했다. 먼저 직렬화 출력을 가져 오기 위해 직접 MemoryStream을 사용했지만 deserialization 할 때 오류가 발생합니다. 하지만 나중에 파일로 직렬화 한 다음 닫고 을 다시 열면 완벽하게 작동합니다. 하지만 직접 스트림으로 가져 가고 싶습니다. 내 프로그램에서 네트워크 클라이언트로 전달하기 위해 자주해야합니다. 그리고 파일 을 반복적으로 사용하면 소프트웨어 속도가 느려질 수 있습니다.

희망 문제를 해결합니다. 어떤 Sugetion?

+0

'MemoryStream'을 사용할 때 어떤 오류가 발생합니까? –

+1

당신은 닷넷에 대해 이야기하고 있습니까? 나는 당신이 언급 한 유형의 이름에 속한다고 생각합니다. 확인 할수 있어요? –

+0

오류가 발생했습니다. – JoshBerke

답변

5

동일한 MemoryStream에서 역 직렬화하려는 경우 먼저 스트림 시작 부분으로 돌아 가기 위해 기억하고 있습니까?

var foo = "foo"; 
var formatter = new BinaryFormatter(); 
using (var stream = new MemoryStream()) 
{ 
    // Serialize. 
    formatter.Serialize(stream, foo); 

    // Deserialize. 
    stream.Seek(0, SeekOrigin.Begin); 
    foo = formatter.Deserialize(stream) as string; 
} 
+0

너는 내가 바보 같은 사람이라는 것을 알고있다. 나는 그것을 잊었다. 감사합니다. 죄송합니다. – Harun

+0

+1 특히 OP의 문제처럼 보이는 탐색을 언급합니다. –

+1

@Harun,이 대답이 문제를 올바르게 해결했다면 번호 아래의 체크 표시를 클릭하여 정답으로 표시하십시오. 이것은 답변에 대한 포스터 rep 지점을 제공하고 사람들이 귀하의 질문에 대답하도록 장려하는 "% accepted"점수를 도와줍니다. –

1

문자열을 앞뒤로 직렬화하는 빠르고 간단한 샘플입니다. 이게 네가하려는거야?

static void Main(string[] args) 
     { 
      var str = "Hello World"; 

      var stream = Serialize(str); 
      stream.Position = 0; 
      var str2 = DeSerialize(stream); 

      Console.WriteLine(str2); 
      Console.ReadLine(); 
     } 

     public static object DeSerialize(MemoryStream stream) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 
      return formatter.Deserialize(stream); 
     } 
     public static MemoryStream Serialize(object data) 
     { 

      MemoryStream streamMemory = new MemoryStream(); 
      BinaryFormatter formatter = new BinaryFormatter(); 

      formatter.Serialize(streamMemory, data); 

      return streamMemory; 

     } 
관련 문제