Yanıtlar:
Bir .Net framework uygulamasında bir nesne oluşturduğunuzda, verilerin bellekte nasıl saklandığını düşünmenize gerek yoktur. Çünkü .Net Framework bunu sizin yerinize halleder. Ancak, bir nesnenin içeriğini bir dosyaya depolamak, bir nesneyi başka bir işleme göndermek veya ağ üzerinden iletmek istiyorsanız, nesnenin nasıl temsil edildiğini düşünmeniz gerekir, çünkü farklı bir biçime dönüştürmeniz gerekir . Bu dönüşüme SERIALIZATION denir.
Serileştirme, geliştiricinin bir nesnenin durumunu kaydetmesine ve gerektiğinde yeniden oluşturmasına olanak tanıyarak nesnelerin depolanmasını ve veri alışverişini sağlar. Serileştirme yoluyla bir geliştirici, nesneyi bir Web Hizmeti aracılığıyla uzak bir uygulamaya göndermek, bir nesneyi bir etki alanından diğerine geçirmek, bir nesneyi güvenlik duvarından XML dizesi olarak geçirmek veya güvenliği veya kullanıcıya özgü tutmak gibi eylemler gerçekleştirebilir uygulamalar arasında bilgi.
SerializableAttribute
Bu tür örneklerin serileştirilebileceğini belirtmek için bir türe uygulayın . SerializableAttribute
Sınıf ISerializable
serileştirme sürecini kontrol etmek için arabirimi uygulasa bile uygulayın .
SerializableAttribute
Türü ISerializable
serileştirme işlemini geçersiz kılmak için arabirim uygulamadığı sürece, ile işaretlenen bir türdeki tüm ortak ve özel alanlar varsayılan olarak serileştirilir. Varsayılan serileştirme işlemi ile işaretli alanları hariç tutar NonSerializedAttribute
. Serileştirilebilir türdeki bir alan, belirli bir ortama özgü bir işaretçi, tanıtıcı veya başka bir veri yapısı içeriyorsa ve farklı bir ortamda anlamlı bir şekilde yeniden oluşturulamıyorsa, NonSerializedAttribute
bu alana uygulamak isteyebilirsiniz .
Daha fazla ayrıntı için MSDN'ye bakın.
Düzenle 1
Bir şeyi serileştirilebilir olarak işaretlememek için herhangi bir neden
Veri aktarırken veya kaydederken, yalnızca gerekli verileri göndermeniz veya kaydetmeniz gerekir. Dolayısıyla, aktarım gecikmeleri ve depolama sorunları daha az olacaktır. Böylece serileştirirken gereksiz veri yığınlarını devre dışı bırakabilirsiniz.
[Serializable]
Özellik için bazı pratik kullanımlar :
BinaryFormatter
System.Runtime.Serialization.Formatters.Binary'da sınıfa bakınClipboard.SetData()
sınıflar - serileştirilemeyen sınıflar panoya yerleştirilemez.MarshalByRefObject
serileştirilebilir olmalıdır.Bunlar, karşılaştığım en yaygın kullanım durumları.
Orijinal soru SerializableAttribute ile ilgili olduğundan, bu özelliğin yalnızca BinaryFormatter veya SoapFormatter kullanılırken geçerli olduğuna dikkat edilmelidir.
Ayrıntılara gerçekten dikkat etmediğiniz sürece, ne zaman kullanılacağı ve gerçek amacının ne olduğu konusunda biraz kafa karıştırıcı.
XML veya JSON serileştirme ile ilgisi yoktur.
SerializableAttribute ile kullanılan ISerializable Arabirimi ve SerializationInfo Sınıfıdır. Bunlar sadece BinaryFormatter veya SoapFormatter ile birlikte kullanılır.
Sınıfınızı Binary veya Soap kullanarak serileştirmeyi düşünmüyorsanız, sınıfınızı [Serializable] olarak işaretlemekten çekinmeyin. XML ve JSON serileştiricileri varlığının farkında bile değil.
Serializable
ve öznitelik kaldırıldığında önceki bir alt çizgiyle çıktı . Yani biraz parazit olabilir.
Serileştirme, nesneyi saklamak veya belleğe, veritabanına veya bir dosyaya iletmek için bir nesneyi bayt akışına dönüştürme işlemidir.
Serileştirme Nasıl Çalışır?
Bu şekilde genel serileştirme süreci gösterilmektedir.
Nesne, yalnızca verileri değil, sürüm, kültür ve montaj adı gibi nesnenin türü hakkında da bilgi taşıyan bir akışa serileştirilir. Bu akıştan bir veritabanında, dosyada veya bellekte saklanabilir.
Serileştirmenin nasıl çalıştığına dair kısa bir örnek. Aynı şeyi öğreniyordum ve iki bağlantıyı yararlı buldum. Serileştirme nedir ve .NET'te nasıl yapılabilir .
Serileştirmeyi açıklayan örnek bir program
Yukarıdaki programı anlamıyorsanız, burada açıklamalı çok basit bir program verilmiştir .
serileştirme
Serileştirme, bir nesneyi veya bir dizi nesne grafiğini bir akışa dönüştürme işlemidir, ikili serileştirme durumunda bir bayt dizisidir
Serileştirmenin Kullanım Alanları
Aşağıda, bir nesnenin serileştirilmesi sırasında kullanılan bazı yararlı özel özellikler bulunmaktadır
[Serializable] - biz bir nesnenin seri hale getirilebilir işaretlediğinizde> O kullanılır [NonSerialized] biz bir nesnenin alanını seri hale getirmek istemiyorum> O kullanılır -. [OnSerializing] -> Bir nesneyi serileştirirken bir eylem gerçekleştirmek istediğimizde kullanılır [OnSerialized] -> Bir nesneyi akışa serileştirdikten sonra bir eylem gerçekleştirmek istediğimizde kullanılır.
Serileştirme örneği aşağıdadır
[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
}
}
İşte arama kodu
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();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean