2011-01-19 2 views
4

우리는 쉽게 플랫 파일 클래스를 직렬화 할 수 있지만 데이터베이스에 클래스를 직렬화하려면 다음 어떻게 그것을 할 수있는 경우 가능한 어떻게 DB에서 데이터를 deserialize 할 수 있습니다. 수업에. C#에서 샘플 코드를 제공하십시오. 열을 BLOB 바이너리 직렬화를 사용하여, 또는 XML \ 데이터 접촉 \ XML 컬럼 순 데이터의 접촉을 사용하여어떻게 파일 시스템 대신 데이터베이스에 클래스를 직렬화하는 C#

감사

+1

당신에게 모든 스트림에 serialize/de-serialize 할 수 있습니다. 본질적으로 얻을 수있는 것은 무리입니다. f 바이트 - 파일이나 데이터베이스에 저장할 수 있습니다 (SQL Server의 varbinary 열, oracle의 blob). – VinayC

+1

괜찮은 데이터베이스 레이아웃을 만들고이를 C# 코드로 변환하는 것이 좋습니다. 알맞은 OR 매퍼를 사용하거나 유형 데이터 세트/linq2sql을 작성하십시오. – CodingBarfield

답변

8

다른 말처럼 이미 메모리 스트림에서 Byte [] 배열을 가져온 다음 이진 배열을 사용하여 Blob/image 형식의 데이터베이스에 바이트 배열을 저장할 수 있습니다.

다시 읽는 동안 그런 다음 그냥 직렬화

직렬화라는 기술을 사용하여 스트림의 열의 값을 읽어

BinaryFormatter bf = new BinaryFormatter(); 

     List<SearchFilterDetails> _list = QueryFilterDetails.ToList<SearchFilterDetails>(); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      bf.Serialize(ms, _list); 
      return ms.GetBuffer(); 
     } 

역 직렬화

private void DeSerilizeQueryFilters(byte[] items) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 

     List<SearchFilterDetails> _list = new List<SearchFilterDetails>(); 

     try 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       ms.Write(items, 0, items.Length); 
       ms.Position = 0; 

       _list = bf.Deserialize(ms) as List<SearchFilterDetails>; 
      } 

      foreach (SearchFilterDetails mobj in _list) 
      { 
       QueryFilterDetails.Add(mobj); 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
    } 
1

.

편집 : 이진 예제는 @Saurabh에서 이미 제공됩니다. 데이터 계약 예Peter Ritchie's blog으로 제공됩니다.

1

개체를 serialize 할 때 종종 스트림에 대해 수행됩니다. 메모리 스트림에 직렬화 한 다음 바이트를 다시 읽어 데이터베이스에 넣을 수 있습니다.

현재 어떤 직렬화 코드가 있습니까? 전체 코드를 제공하는 것보다 수정하는 방법을 알려주는 것이 좋습니다.

1

클래스 (기본 제공)를 이진 형식 또는 XML로 serialize 할 수 있습니다.
첫 번째 경우는 byte[]이고 두 번째 경우는 string이됩니다.
데이터베이스에 유지해야하는 경우 데이터베이스로 보내야하는 다른 바이트 배열 또는 문자열 (데이터베이스가 네이티브로 지원하는 경우 XML)로 처리하십시오.

2

Thomas, 애플리케이션에서 어떤 종류의 데이터 액세스 논리를 사용하고 있습니까?

데이터베이스와 상호 작용하고 개체를 저장/검색하는 방법을 찾고 있다면 Entity Framework 또는 NHibernate를 살펴볼 수도 있습니다. 이러한 ORM을 사용하면 응용 프로그램에서 실제로 중요한 항목에 집중할 수 있습니다. 객체/엔티티가로드되거나 저장되는 방식이 아닙니다.

1

개체를 XML로 serialize합니다. XML Blob에서 데이터 세트를 읽으십시오. 데이터 집합의 각 테이블/행에 대해 DB create 문을 만듭니다.

관련 문제