[সিরিয়ালাইজয়েবল] কী এবং আমার কখন এটি ব্যবহার করা উচিত?


318

আমি খুঁজে পেয়েছি যে কিছু শ্রেণি [Serializable]বৈশিষ্ট্যটি ব্যবহার করে ।

  • এটা কি?
  • আমি কখন এটি ব্যবহার করব?
  • আমি কী ধরনের সুবিধা পাব?



1
এখানে আমি ব্যবহারিক ব্যবহারের ব্যাখ্যা পেয়েছি।
নিপুনা

উত্তর:


369

এটা কি?

আপনি যখন একটি নেট ফ্রেমওয়ার্ক অ্যাপ্লিকেশনটিতে কোনও অবজেক্ট তৈরি করেন, তখন আপনাকে কীভাবে মেমরিতে ডেটা সংরক্ষণ করা হয় তা নিয়ে ভাবার দরকার নেই। কারণ। নেট ফ্রেমওয়ার্ক আপনার জন্য এটি যত্ন করে। যাইহোক, আপনি যদি কোনও ফাইলের মধ্যে কোনও সামগ্রীর বিষয়বস্তু সংরক্ষণ করতে চান, অন্য কোনও প্রক্রিয়াতে কোনও বস্তু প্রেরণ করতে পারেন বা এটি নেটওয়ার্ক জুড়ে প্রেরণ করতে চান তবে আপনাকে কীভাবে অন্য একটি বিন্যাসে রূপান্তরিত করতে হবে তা আপনাকে কীভাবে উপস্থাপন করা হবে তা নিয়ে ভাবতে হবে । এই রূপান্তরটিকে সিরিয়ালাইজেশন বলা হয়।

সিরিয়ালাইজেশন জন্য ব্যবহার

সিরিয়ালাইজেশন বিকাশকারীকে কোনও সামগ্রীর অবস্থা বাঁচাতে এবং প্রয়োজন অনুসারে পুনরায় তৈরি করতে, অবজেক্টগুলির সঞ্চয় এবং ডেটা এক্সচেঞ্জ প্রদানের অনুমতি দেয়। সিরিয়ালাইজেশনের মাধ্যমে, কোনও বিকাশকারী কোনও ওয়েব সার্ভিসের মাধ্যমে কোনও বিষয়টিকে দূরবর্তী অ্যাপ্লিকেশনটিতে প্রেরণ করা, একটি ডোমেন থেকে অন্য ডোমেইনে কোনও বস্তুটি প্রেরণ করা, কোনও এক্সএমএল স্ট্রিং হিসাবে ফায়ারওয়ালের মাধ্যমে কোনও বস্তুটি পাস করা, বা সুরক্ষা বা ব্যবহারকারী-নির্দিষ্ট বজায় রাখার মতো ক্রিয়া সম্পাদন করতে পারে অ্যাপ্লিকেশন জুড়ে তথ্য।

SerializableAttributeএই ধরণের উদাহরণগুলি সিরিয়ালযুক্ত করা যেতে পারে তা বোঝাতে কোনও প্রকারে প্রয়োগ করুন । SerializableAttributeএমনকি শ্রেণিটি ISerializableসিরিয়ালকরণ প্রক্রিয়া নিয়ন্ত্রণ করতে ইন্টারফেস প্রয়োগ করে এমনকি প্রয়োগ করুন ।

প্রকারের দ্বারা চিহ্নিত একটি ধরণের সমস্ত সরকারী এবং ব্যক্তিগত ক্ষেত্রগুলি SerializableAttributeডিফল্টরূপে সিরিয়ালাইজড হয়, যদি না টাইপটি ISerializableসিরিয়ালাইজেশন প্রক্রিয়াটিকে ওভাররাইড করার জন্য ইন্টারফেসটি প্রয়োগ না করে। ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়াটি চিহ্নিত ক্ষেত্রগুলি বাদ দেয় NonSerializedAttribute। যদি সিরিয়ালাইজযোগ্য ধরণের কোনও ক্ষেত্রে কোনও পয়েন্টার, একটি হ্যান্ডেল বা কোনও নির্দিষ্ট ডেটা স্ট্রাকচার থাকে যা একটি নির্দিষ্ট পরিবেশের সাথে সুনির্দিষ্ট থাকে এবং অর্থপূর্ণভাবে অন্য পরিবেশে পুনর্গঠন না করা যায়, তবে আপনি NonSerializedAttributeসেই ক্ষেত্রে প্রয়োগ করতে চাইতে পারেন ।

আরও তথ্যের জন্য এমএসডিএন দেখুন ।

সম্পাদনা 1

কোনও কিছু সিরিয়ালযোগ্য হিসাবে চিহ্নিত না করার কোনও কারণ

ডেটা স্থানান্তর বা সংরক্ষণ করার সময়, আপনাকে কেবল প্রয়োজনীয় ডেটা প্রেরণ বা সংরক্ষণ করতে হবে। সুতরাং স্থানান্তর বিলম্ব এবং স্টোরেজ সমস্যা কম থাকবে। সুতরাং সিরিয়ালকরণের সময় আপনি অযৌক্তিকভাবে ডেটা বেছে নিতে পারেন।


1
@dwbartz আপনার প্রশ্নের উত্তর এখানে লিঙ্ক
jayasurya_j

2
চমৎকার এক্সপ্লিনেশন, এমএসডিএন =) এ বৈশিষ্ট্যে এটি যুক্ত করে ভালো লাগবে =)
মার্টিয়া

@ জাজাসুর্য_জে খুব খারাপ গৃহীত উত্তর ব্যক্তিগত অংশ
আলেকজান্ডার

1
ভাল ব্যাখ্যা
জাকির এইচসি

42

[Serializable]বৈশিষ্ট্যের জন্য কিছু ব্যবহারিক ব্যবহার :

  • বাইনারি সিরিয়ালাইজেশন ব্যবহার করে অবজেক্টের স্টেট সংরক্ষণ করা; আপনি খুব সহজেই কোনও ফাইল বা নেটওয়ার্ক স্ট্রিমে আপনার অ্যাপ্লিকেশনটিতে পুরো অবজেক্টের দৃষ্টান্তগুলি 'সংরক্ষণ' করতে পারেন এবং তারপরে ডিসরিয়ালাইজেশন করে তাদের পুনরায় তৈরি করতে পারেন - সিস্টেমের মধ্যে BinaryFormatterশ্রেণিটি দেখুন un
  • ক্লাস Clipboard.SetData()বোর্ডগুলির লেখার ক্লাসগুলি ক্লিপবোর্ডে ব্যবহার করে সংরক্ষণ করা যেতে পারে - ননসেরিয়ালাইজেবল ক্লাসগুলি ক্লিপবোর্ডে স্থাপন করা যায় না।
  • .NET রিমোটিংয়ের সাথে সামঞ্জস্যপূর্ণ লেখার ক্লাস; সাধারণত, অ্যাপ্লিকেশন ডোমেনগুলির মধ্যে আপনি যে কোনও শ্রেণীর উদাহরণটি পাস করেন (সেগুলি ব্যতীত ব্যতীত MarshalByRefObject) অবশ্যই সিরিয়ালযোগ্য হবে।

এগুলি সর্বাধিক সাধারণ ব্যবহারের কেস যা আমি জুড়ে এসেছি।


41

যেহেতু মূল প্রশ্নটি সিরিয়ালাইজেবল অ্যাট্রিবিউট সম্পর্কে ছিল, তবে এটি লক্ষ করা উচিত যে বাইনারি ফর্ম্যাটর বা সোপফর্ম্যাটর ব্যবহার করার সময় এই বৈশিষ্ট্যটি কেবলমাত্র প্রয়োগ হয়।

এটি কিছুটা বিভ্রান্তিকর, যদি না আপনি প্রকৃতপক্ষে বিশদটির প্রতি মনোযোগ দিন, এটি কখন ব্যবহার করবেন এবং এর আসল উদ্দেশ্য কী।

এটি এক্সএমএল বা জেএসএন সিরিয়ালাইজেশনের সাথে কিছু করার নেই।

সিরিয়ালাইজেবলঅ্যাট্রিবিউটের সাথে ব্যবহৃত হ'ল ইশিরাইজযোগ্য ইন্টারফেস এবং সিরিয়ালাইজেশন ইনফো ক্লাস। এগুলি শুধুমাত্র বাইনারিফর্মেটর বা সোপফর্মেটর দিয়ে ব্যবহৃত হয়।

আপনি যদি বাইনারি বা সাবান ব্যবহার করে আপনার ক্লাসিকে সিরিয়ালকরণের পরিকল্পনা না করেন তবে আপনার শ্রেণিটিকে [সিরিয়ালাইজযোগ্য] হিসাবে চিহ্নিত করার জন্য বিরক্ত করবেন না। এক্সএমএল এবং জেএসএন সিরিয়ালাইজাররা এর অস্তিত্ব সম্পর্কে সচেতন নয়।


16
"এটি এক্সএমএল বা জেএসএন সিরিয়ালাইজেশনের সাথে কিছুই করার নেই" - আপনাকে ধন্যবাদ! অবশেষে একটি ব্যাখ্যা কেন আমি এই বৈশিষ্ট্যটির সাথে বা ছাড়াই XML তে সুখীভাবে সিরিয়াল করতে পারি
ইউজারসটিভ

1
আপনি এই জন্য একটি উৎস আছে?
মিশিয়েল ভ্যান অস্টারহাট

"এক্সএমএল এবং জেএসএন সিরিয়ালাইজাররা এর অস্তিত্ব সম্পর্কে সচেতন নয়"। আমি যে বিষয়ে জানি না. যখন আমি জেএসওএন ডাব্লুসিএফের মাধ্যমে কোনও শ্রেণি বিন্যাস করলাম তখন শ্রেণীর নামটি ছিল Serializableনা এবং বৈশিষ্ট্যটি কখন সরিয়ে ফেলা হয়েছিল সেগুলি ছাড়া সম্পত্তিটির নামগুলি পূর্ববর্তী আন্ডারস্কোর সহ বেরিয়েছিল । সুতরাং কিছু হস্তক্ষেপ সম্ভব।
জেনস

@ জেনস যদি আমি সঠিকভাবে বুঝতে পেরে থাকি তবে জেএসওন.টোন এ সম্পর্কে কিছুটা যত্ন নেবে না তবে এসপ নেট এই আচরণটি কিছুটা পরিবর্তন করে। আমি বিশ্বাস করি আপনি জেসনঅবজেক্ট / জসনপ্রোপার্টি বৈশিষ্ট্যগুলির সাথে এটি এড়িয়ে যেতে পারেন।
বেস

29

সিরিয়ালাইজেশন হ'ল বস্তুটিকে সঞ্চয় বা মেমরি, একটি ডাটাবেস বা কোনও ফাইলে স্থানান্তরিত করার জন্য কোনও বাইটের প্রবাহে রূপান্তর করার প্রক্রিয়া।

সিরিয়ালাইজেশন কীভাবে কাজ করে

এই চিত্রণটি সিরিয়ালকরণের সামগ্রিক প্রক্রিয়াটি দেখায়।

এখানে চিত্র বর্ণনা লিখুন

অবজেক্টটি একটি স্ট্রিমায় সিরিয়ালযুক্ত করা হয়েছে, যা কেবলমাত্র ডেটাই নয়, অবজেক্টের ধরণ, যেমন সংস্করণ এবং সমাবেশের নাম সম্পর্কিত তথ্য বহন করে। সেই স্ট্রিম থেকে, এটি একটি ডাটাবেস, একটি ফাইল বা মেমরিতে সংরক্ষণ করা যেতে পারে।

এমএসডিএন-তে বিশদ।


19

সিরিয়ালাইজেশন কীভাবে কাজ করে তার সংক্ষিপ্ত উদাহরণ এখানে। আমি একই সম্পর্কে শিখছিলাম এবং আমি দুটি লিঙ্ক দরকারী বলে মনে করি। সিরিয়ালাইজেশন কী এবং কীভাবে এটি নেট থেকে করা যায়

সিরিয়ালাইজেশন ব্যাখ্যা করে একটি নমুনা প্রোগ্রাম

আপনি যদি উপরের প্রোগ্রামটি না বুঝতে পারেন তবে ব্যাখ্যা সহ একটি খুব সাধারণ প্রোগ্রাম এখানে দেওয়া হল ।


14

ধারাবাহিকতাতে

সিরিয়ালাইজেশন হ'ল কোনও বস্তু বা সামগ্রীর গ্রাফকে একটি স্ট্রিমে রূপান্তর করার প্রক্রিয়া, এটি বাইনারি ক্রমিকরণের ক্ষেত্রে বাইট অ্যারে হয়

সিরিয়ালাইজেশন ব্যবহার

  1. কোনও ফাইল, ডাটাবেস ইত্যাদির মধ্যে কোনও বস্তুর অবস্থা সংরক্ষণ করতে এবং এটি পরে ব্যবহার করুন।
  2. একই মেশিনে একটি প্রক্রিয়া থেকে অন্য একটি (অ্যাপ্লিকেশন ডোমেন) এ কোনও বস্তু প্রেরণ এবং অন্য মেশিনে চলমান প্রক্রিয়াতে এটিকে তারের ওপারেও প্রেরণ করা।
  3. মূল অবজেক্টে কাজ করার সময় ব্যাকআপ হিসাবে মূল অবজেক্টের ক্লোন তৈরি করতে।
  4. সামগ্রীর একটি সেট সহজেই সিস্টেমের ক্লিপবোর্ডে অনুলিপি করা যায় এবং তারপরে একই বা অন্য কোনও অ্যাপ্লিকেশনটিতে আটকানো যায়

নীচে কিছু দরকারী কাস্টম অ্যাট্রিবিউটস যা কোনও বস্তুর ক্রমিকায়নের সময় ব্যবহৃত হয় during

[সিরিয়ালাইজযোগ্য] -> আমরা যখন কোনও জিনিসের সিরিয়ালাইজযোগ্য [ননশিরাইজড] চিহ্নিত করি তখন এটি ব্যবহার করা হয় -> যখন আমরা কোনও বস্তুর ক্ষেত্রটি সিরিয়াল করতে চাই না তখন এটি ব্যবহৃত হয়। [অনারাইজালাইজিং] -> যখন আমরা কোনও বস্তুকে সিরিয়ালাইজ করার সময় কিছু ক্রিয়াকলাপ করতে চাই তখন এটি ব্যবহৃত হয় [অনারাইজালাইজড] -> যখন কোনও বস্তুকে স্রোতে পরিণত করার পরে আমরা কিছু ক্রিয়া করতে চাই তখন এটি ব্যবহৃত হয়।

নীচে সিরিয়ালকরণের উদাহরণ দেওয়া হল

[Serializable]
    internal class DemoForSerializable
    {
        internal string Fname = string.Empty;
        internal string Lname = string.Empty;

        internal Stream SerializeToMS(DemoForSerializable demo)
        {
            DemoForSerializable objSer = new DemoForSerializable();
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, objSer);
            return ms;
        }

        [OnSerializing]
        private void OnSerializing(StreamingContext context) {
            Fname = "sheo";
            Lname = "Dayal";
        }
        [OnSerialized]
        private void OnSerialized(StreamingContext context)
        {
       // Do some work after serialized object
        }

    }

এখানে কলিং কোড

class Program
    {
        string fname = string.Empty;
        string Lname = string.Empty; 

       static void Main(string[] args)
        {
            DemoForSerializable demo = new DemoForSerializable();

            Stream ms = demo.SerializeToMS(demo);
            ms.Position = 0;

            DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;

            Console.WriteLine(demo1.Fname);
            Console.WriteLine(demo1.Lname);
            Console.ReadLine();
        }

    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.