سؤال

وأنا تريد أن تجعل من تسلسل ثنائي كائن ونتيجة لحفظه في قاعدة بيانات.

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 أو أي شيء مماثل - البيانات الثنائية هو <م> لا ، ويجب ألا يعامل البيانات النص المشفرة على هذا النحو

ولكن، لا قاعدة البيانات الخاصة بك ليس لديها نوع البيانات البيانات الثنائية؟ التحقق من وجود BLOB، IMAGE وأنواع الثنائية ...

نصائح أخرى

وفيما يلي عينة. يجب أن تكون وضعت TData [تسلسل] وكافة المجالات اكتب أيضا.

    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 المتاحة لتخزين البيانات الثنائية.

إذا كنت حقا بحاجة لجعل البيانات كسلسلة، ستحتاج إلى تحويل بايت بك [] لسلسلة باستخدام base64 ترميز، والاستيلاء على [] بايت من فك استخدام السلسلة.

هل لا ينظر إلى تحويل memorystream إلى سلسلة base64hex لوضعها في قاعدة البيانات؟

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

وبعد ذلك يمكنك تفريغ محتويات sConvertdHex إلى قاعدة البيانات. إلغاء تسلسل ذلك ما عليك القيام به لعكس

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

وثم إلغاء تسلسل mData إلى وجوه الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top