문제

객체의 이진 직렬화와 결과를 데이터베이스에 저장하고 싶습니다.

Person person = new Person();
person.Name = "something";

MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, person);

데이터베이스에 저장할 문자열 유형에서 MemoryStream을 어떻게 변환하고, 그 후에 객체를 사로화 할 수 있습니까?

도움이 되었습니까?

해결책

당신은 무엇입니까? 진짜 요청하는 것은 임의의 이진 데이터를 텍스트로 표현한 다음 다시 변환하는 안전한 방법입니다. 직렬화 된 객체를 저장한다는 사실은 관련이 없습니다.

대답은 거의 기본 64를 사용하는 것입니다 (예 : Convert.ToBase64String 그리고 Convert.FromBase64String). 하다 ~ 아니다 사용 Encoding.UTF8.GetString 또는 유사한 것 - 이진 데이터입니다 ~ 아니다 인코딩 된 텍스트 데이터를 처리해서는 안됩니다.

그러나 데이터베이스에 이진 데이터에 대한 데이터 유형이 없습니까? 얼룩, 이미지 및 이진 유형을 확인하십시오 ...

다른 팁

다음은 샘플입니다. TDATA는 [SERIALIZABLE]으로 표시하고 모든 필드 유형도 표시해야합니다.

    private static TData DeserializeFromString<TData>(string settings)
    {
        byte[] b = Convert.FromBase64String(settings);
        using (var stream = new MemoryStream(b))
        {
            var formatter = new BinaryFormatter();
            stream.Seek(0, SeekOrigin.Begin);
            return (TData)formatter.Deserialize(stream);
        }
    }

    private static string SerializeToString<TData>(TData settings)
    {
        using (var stream = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(stream, settings);
            stream.Flush();
            stream.Position = 0;
            return Convert.ToBase64String(stream.ToArray());
        }
    }
//-------write to database-------------------------
Person person = new Person();
person.name = "Firstnm  Lastnm";
MemoryStream memorystream = new MemoryStream(); 
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, person);
byte[] yourBytesToDb = memorystream.ToArray();
//here you write yourBytesToDb to database


//----------read from database---------------------
//here you read from database binary data into yourBytesFromDb
MemoryStream memorystreamd = new MemoryStream(yourBytesFromDb);
BinaryFormatter bfd = new BinaryFormatter();
Person deserializedperson = bfd.Deserialize(memorystreamd) as Person;

나는 이런 것을 사용했다

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, Person);
memoryStream.Flush();
memoryStream.Position = 0;
string value = Convert.ToBase64String(memoryStream.ToArray());

원래, ~하지 않다 데이터를 데이터베이스에 문자열로 저장하면 blob 이진 데이터를 저장하는 데 사용할 수있는 필드.

실제로 데이터를 문자열로 가져야하는 경우 Byte []를 Base64 인코딩을 사용하여 바이트 []를 문자열로 변환하고 문자열 사용 디코딩에서 바이트 []를 잡아야합니다.

메모리 스트림을 데이터베이스에 넣을 Base64hex 문자열로 변환하지 않았습니까?

 byte[] mStream = memorystream.ToArray();
 string sConvertdHex = System.Convert.ToBase64String(mStream)

그런 다음 내용 SconvertDHex를 데이터베이스에 버릴 수 있습니다. 그것을 버리기 위해서는 반대를해야합니다

 byte[] mData = System.Convert.FromBase64String(...)

그런 다음 MDATA를 객체로 다시 데려옵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top