ডেটা কন্ট্রাক্ট এবং ডেটা মেম্বার বৈশিষ্ট্যগুলি কখন ব্যবহার করবেন?


178

DataContractডাব্লুসিএফ- এর বৈশিষ্ট্যটি সম্পর্কে আমি খুব বিভ্রান্ত । আমার জ্ঞান অনুসারে এটি ক্লাসের মতো ব্যবহারকারী সংজ্ঞায়িত ধরণের সিরিয়ালাইজেশনের জন্য ব্যবহৃত হয়। আমি একটি ক্লাস লিখেছিলাম যা ক্লায়েন্টের মতো প্রকাশিত হয়।

[DataContract]
public class Contact
{
    [DataMember]
    public int Roll { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Address { get; set; }

    [DataMember]
    public int Age { get; set; }
}

এটি সঠিকভাবে কাজ করছে তবে আমি যখন সরিয়ে ফেলি DataContractএবং DataMemberএটিও সঠিকভাবে কাজ করে। কেন এটি সঠিকভাবে কাজ করছে তা আমি বুঝতে পারি না। কেউ কি আমাকে বলতে পারবেন যে আসল ব্যবহারটি DataContractকী?

আমার পরিষেবা চুক্তিটি দেখতে এমন দেখাচ্ছে

[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}

একটি নিখুঁত উত্তর এখানে স্ট্যাকওভারফ্লো.com
আসিফ ইকবাল

উত্তর:


360

.NET 3.5 এসপি 1 এর সাথে প্রচুর প্রোগ্রামারগুলি [DataContract]এবং [DataMember]বৈশিষ্ট্যগুলি নিয়ে অভিভূত হয়ে পড়েছিল , তাই মাইক্রোসফ্ট ডেটা কন্ট্রাক্ট সিরিয়ালাইজারকে সমস্ত শ্রেণি - এমনকি সেই বৈশিষ্ট্যগুলির কোনও ছাড়াই - পরিচালনা করতে পেরেছিল - অনেকটা পুরানো এক্সএমএল সিরিয়ালাইজারের মতো।

সুতরাং .NET 3.5 এসপি 1 থেকে আপনি না আছে ডেটা চুক্তি বা তথ্য সদস্য যোগ আর বৈশিষ্ট্যাবলী - আপনি না পরে তথ্য চুক্তি serializer সব পাবলিক বৈশিষ্ট্য আপনার বর্গ উপর, ঠিক এক্সএমএল serializer would ধারাবাহিকভাবে হবে।

তবুও : এই গুণাবলী যুক্ত না করে আপনি প্রচুর দরকারী ক্ষমতা হারাবেন:

  • ছাড়া [DataContract], আপনি লাইভ মধ্যে আপনার তথ্য জন্য একটি XML নামস্থান সংজ্ঞায়িত করতে পারবে না
  • ছাড়া [DataMember], আপনি অ-সর্বজনীন বৈশিষ্ট্য বা ক্ষেত্রগুলিকে ক্রমিক করতে পারবেন না
  • ছাড়াই [DataMember], আপনি ক্রমিককরণ ( Order=) এর অর্ডার নির্ধারণ করতে পারবেন না এবং ডিসিএস সমস্ত বৈশিষ্ট্য বর্ণানুক্রমিকভাবে সিরিয়ালাইজ করবে
  • ছাড়া [DataMember], আপনি আপনার সম্পত্তি ( Name=) এর জন্য আলাদা নাম নির্ধারণ করতে পারবেন না
  • ছাড়া [DataMember], আপনি জিনিস IsRequired=বা অন্যান্য দরকারী বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে পারবেন না
  • ছাড়া [DataMember], আপনি নির্দিষ্ট পাবলিক সম্পত্তি ছেড়ে যেতে পারবেন না - সমস্ত পাবলিক সম্পত্তি ডিসিএস দ্বারা ক্রমিকিত করা হবে

সুতরাং একটি "তাত্ক্ষণিকভাবে" সমাধানের জন্য, বৈশিষ্ট্যগুলি [DataContract]এবং [DataMember]বৈশিষ্ট্যগুলি ফেলে রেখে কাজ করবে - তবে আপনি কী করছেন সে সম্পর্কে আরও স্পষ্ট থাকতে, এবং নিজেকে দেওয়ার জন্য - এটি এখনও আপনার ডেটা ক্লাসে এগুলি রাখা ভাল ধারণা idea এগুলি ছাড়া আপনি পান না এমন সমস্ত অতিরিক্ত বৈশিষ্ট্যগুলিতে অ্যাক্সেস করুন ...


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

2
@ সন্তোষ: আপনার যদি কিছু জনসাধারণের সম্পত্তি নিয়ে ক্লাস থাকে তবে আপনি ডাব্লুসিএফ ডেটা কন্ট্রাক্ট সিরিয়ালাইজার দ্বারা সিরিয়ালীকৃত হবে, যদি না আপনি স্পষ্টভাবে [ডেটা কনট্রাক্ট] / [ডেটা মেম্বার] প্রয়োগ করেন-তবে সিরিয়ালীকৃত কী হবে তা বলার জন্য এটি আপনার 100% পর্যন্ত এবং কি নয়
মার্ক_স

36
@ আর্থিস: এটি সম্পূর্ণ সত্য নয়। .NET 3.5 এসপি 1 হিসাবে, ডাব্লুসিএফ আনন্দের সাথে ক্লাসটি সিরিয়াল করে দেবে কোনও [DataContract] এবং [DataMember]গুণাবলী ছাড়াই ... তবে আপনি এই বৈশিষ্ট্যগুলির মধ্যে কোনওটি ব্যবহার শুরু করার সাথে সাথে এই "ডিফল্ট" আচরণটি কাজ করা বন্ধ করে দেবে - যত তাড়াতাড়ি আপনার একক [DataMember] আছে শ্রেণি, সেই বিন্দু থেকে, কেবলমাত্র এই বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যগুলি সিরিয়ালায়িত করা হবে।
marc_s

4
Oohh! সেই পয়েন্টটি স্পষ্ট করার জন্য থেক্স! আমি এটিকে আরও খানিকটা খনন করব!
আর্থিস

6
Youhou! এটা শিলা!! মেরি বিউউক!
আর্থি

15

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

ডেটা সিরিয়ালাইজ করার জন্য আমরা [ডেটা কনট্র্যাক্ট] এবং [ডাটাবেম্বার] বৈশিষ্ট্যগুলি ব্যবহার করি। আপনার ক্ষেত্রে যদি আপনি datacontractডাব্লুসিএফ ব্যবহার করছেন তবে DataContractSerializerঅন্য ডাব্লুসিএফ ব্যবহার করে XmlSerializerযা ডিফল্ট সিরিয়ালাইজেশন কৌশল।

আমাকে বিস্তারিতভাবে বলি:

মূলত ডাব্লুসিএফ 3 ধরণের সিরিয়ালাইজেশন সমর্থন করে:

  1. XmlSerializer
  2. DataContractSerializer
  3. NetDataContractSerializer

এক্সএমএলসায়ারাইজার : - ডিফল্ট অর্ডার ক্লাস হিসাবে একই

ডেটা কন্ট্রাক্টসরিশালাইজার / নেটডাটা কন্ট্র্যাক্টসরিয়ালাইজার : - ডিফল্ট ক্রম বর্ণানুক্রমিক

এক্সএমএলসিরাইজার : - এক্সএমএল স্কিমা বিস্তৃত

ডেটা কন্ট্রাক্টসরিয়ালাইজার / নেটডাটা কন্ট্র্যাক্টসরিয়ালাইজার : - এক্সএমএল স্কিমা সীমাবদ্ধ

এক্সএমএলসিরাইজার : - সংস্করণ সমর্থন সম্ভব নয়

ডেটা কন্ট্রাক্টসরিয়ালাইজার / নেটডাটা কন্ট্র্যাক্টসরিয়ালাইজার : - সংস্করণ সমর্থন সম্ভব

এক্সএমএলসিরাইজার : - এএসএমএক্সের সাথে সামঞ্জস্যতা

ডেটা কন্ট্র্যাক্টসরিয়ালাইজার / নেটডেটা কন্ট্র্যাক্টসরিয়ালাইজার : -। নেট রিমোটিংয়ের সাথে সামঞ্জস্যতা

এক্সএমএলসিরাইজার : - এক্সএমএলসায়ারাইজারে অ্যাট্রিবিউটের প্রয়োজন নেই

ডেটা কন্ট্র্যাক্টসরিয়ালাইজার / নেটডাটা কন্ট্র্যাক্টসরিয়ালাইজার : - এই সিরিয়ালাইজেশনে অ্যাট্রিবিউট দরকার

সুতরাং আপনি যা ব্যবহার করেন তা আপনার প্রয়োজনীয়তার উপর নির্ভর করে ...


8

ডেটা চুক্তি হ'ল কোনও পরিষেবা এবং ক্লায়েন্টের মধ্যে একটি আনুষ্ঠানিক চুক্তি যা বিনিময়ের জন্য ডেটা বিমূর্তভাবে বর্ণনা করে। এটি, যোগাযোগ করার জন্য, ক্লায়েন্ট এবং পরিষেবাটিকে একই ধরণের ভাগ করতে হবে না, কেবল একই ডেটা চুক্তি racts প্রতিটি প্যারামিটার বা রিটার্ন টাইপের জন্য একটি ডেটা চুক্তি হুবহু সংজ্ঞায়িত করে, কী পরিমাণ ডেটা ক্রমিকিত করা হয় (এক্সএমএল রূপান্তরিত) তা এক্সচেঞ্জ হতে হবে।

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

আপনি এখানে পুরো নিবন্ধটি পেতে পারেন


2
এগুলি সবই সত্য এবং জরিমানা, তবে কেন ডেটা কন্ট্রাক্ট সিরিয়ালাইজার আপনার ক্লাসে কোনও [ডেটা কন্ট্রাক্ট] এবং [ডেটা মেম্বার] বৈশিষ্ট্য ছাড়াই কাজ করে কেন ওপি-র প্রশ্নের উত্তর দেয় না ....
মার্ক_স

কেউ আমাকে বলতে পারেন যে ডেটা কন্ট্রাক্টের আসল ব্যবহার কী? - আমার মনে হয় প্রশ্নগুলি অন্তত অংশ হয় উত্তর।
IAbstract

2

ডেটা চুক্তি হ'ল কোনও পরিষেবা এবং ক্লায়েন্টের মধ্যে একটি আনুষ্ঠানিক চুক্তি যা বিনিময়ের জন্য ডেটা বিমূর্তভাবে বর্ণনা করে।

ডেটা চুক্তি সুস্পষ্ট বা অন্তর্নিহিত হতে পারে। সরল প্রকারের যেমন ইন্ট, স্ট্রিং ইত্যাদির একটি অন্তর্নিহিত ডেটা চুক্তি রয়েছে। ব্যবহারকারীর সংজ্ঞায়িত অবজেক্টটি স্পষ্ট বা জটিল ধরণের, যার জন্য আপনাকে [ডেটা চুক্তি] এবং [ডেটা মেম্বার] বৈশিষ্ট্য ব্যবহার করে কোনও ডেটা চুক্তি সংজ্ঞায়িত করতে হবে।

একটি ডেটা চুক্তি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা যেতে পারে:

  • এটি পরিষেবা অপারেশনগুলিতে এবং থেকে পাস করা ডেটার বাহ্যিক ফর্ম্যাটটিকে বর্ণনা করে

  • এটি পরিষেবা বার্তাগুলিতে আদান-প্রদানের কাঠামো এবং প্রকারের সংজ্ঞা দেয়

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

আমাদের প্রকল্পের সময়সূচি.ব্যবস্থাপনা রেফারেন্স অন্তর্ভুক্ত করা দরকার। এই সমাবেশটি ডেটা কন্ট্রাক্ট এবং ডেটা মেম্বার বৈশিষ্ট্য ধারণ করে।


2
  1. ডেটা চুক্তি: এটি নির্দিষ্ট করে যে আপনার সত্তা শ্রেণি সিরিয়ালাইজেশন প্রক্রিয়ার জন্য প্রস্তুত।

  2. ডেটা সদস্যগণ: এটি নির্দিষ্ট করে যে নির্দিষ্ট ক্ষেত্রটি ডেটা চুক্তির অংশ এবং এটি সিরিয়ালায়িত করা যেতে পারে।


0

এছাড়াও আপনি যখন এইচটিসি-র অনুরোধটি কল করবেন তখন এটি সঠিকভাবে কাজ করবে তবে যখন নেট.tcp থেকে কল করার চেষ্টা করবেন আপনি এই ধরণের সমস্ত জিনিস পেয়ে যাবেন


0

ডাটা মেম্বার অ্যাট্রিবিউটটি ডেটা সিরিয়ালাইজ করার জন্য বাধ্যতামূলক নয়। যখন ডেটা মেম্বার অ্যাট্রিবিউট যুক্ত করা হয় না, পুরানো এক্সএমএলসিরাইজার ডেটাটিকে সিরিয়ালাইজ করে। একটি ডেটা মেম্বার যুক্ত করা কার্যকর বৈশিষ্ট্য যেমন অর্ডার, নাম, প্রয়োজনীয় যা অন্যথায় ব্যবহার করা যায় না provides

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