2009-10-25 5 views
2

각 새 설치마다 복사 할 수 있도록 리소스로 포함하려는 사용자 지정 목록이 있습니다. 그러나 내 목록이 이진 파일로 serialize되고 리소스로 추가 할 때 C#은 바이트 배열로 처리하기 때문에 복사 할 수 없습니다. 내 리소스에서 파일을 추출 할 때이 사용자 정의 목록에이 바이트 배열을 다시 변환 할 수 있어야합니다. 누군가이 변환을 수행하는 방법에 대한 아이디어를 줄 수 있습니까?C# 바이트 배열을 일반 목록으로 변환

감사합니다.

+0

"목록"이라고 말하면 정확히 무엇을 의미합니까? –

답변

6

어떤 방식으로 직렬화 했습니까? 일반적으로 당신은 그 과정을 그냥 뒤집을 것입니다. 예 :

BinaryFormatter bf = new BinaryFormatter(); 
using(Stream ms = new MemoryStream(bytes)) { 
    List<Foo> myList = (List<Foo>)bf.Deserialize(ms); 
} 

다른 시리얼 라이저를 사용했다면 분명히 조정할 필요가 있습니다! 또는 byte[] 대신 Stream으로 데이터를 가져올 수 있다면 MemoryStream 단계를 잃을 수 있습니다 ...

+0

물론 'MemoryStream'을 폐기하는 것을 잊지 마십시오! – Noldorin

+0

음, 그렇습니다. 나는 보통 이것에 관한 보복인데,'MemoryStream'에 대해서는 ** 아무런 차이가 없습니다. 나는 단지 너를 위해 편집 할 것이다 .-p –

+0

아하나. 리소스를 가져 와서 파일에 직렬화 한 다음 다시 내 목록에 직렬화하려고했습니다. 이것은 더 의미가 있습니다. 감사합니다. – Nathan

1

목록의 직렬화는 어떻게됩니까? 동일한 Deserialize() 메소드에 액세스 할 수 있어야하며, 그 결과는 원래 목록 유형으로 다시 캐스트 할 수 있습니다.

+0

이것은 리소스를 serialize하는 방법입니다. if (! FiOhaus.Exists) { DirectoryUtil.DoesDataFileExist (OhausScale); using (Stream St = new FileStream (OhausScale, FileMode.OpenOrCreate)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize (St, Resources.Ohaus_Adventure_Pro); } } – Nathan

+0

이렇게하면 파일을 목록으로 다시 deserialize하는 방법입니다. (Stream St = new FileStream (_directory + modelName + ".dat", FileMode.Open)) { if (St.Length> 0) { BinaryFormatter formatter = new BinaryFormatter(); 설정 = (목록 ) formatter.Deserialize (St); isLoaded = true; } } – Nathan

1

바이트 배열을 역 직렬화하여 목록의 인스턴스로 다시 변환해야합니다. 이 작업을 수행하는 방법은 사용자가 직렬화 한 메커니즘에 따라 다릅니다. BinaryFormatter을 사용하여 직렬화하는 경우 (예 : 동일하게 비 직렬화)

관련 문제