ما هو أفضل وسيلة لاستنساخ كائن العمل في Silverlight؟

StackOverflow https://stackoverflow.com/questions/202699

  •  03-07-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لإنشاء نسخة من DTO؟ ليس هناك واجهة ICloneable أو فئة BinaryFormatter في Silverlight. هو انعكاس السبيل الوحيد؟

هل كانت مفيدة؟

المحلول

وهنا هو رمز توصلنا مع لاستنساخ. هذا يعمل في Silverlight 2 و 3.

Public Shared Function Clone(Of T)(ByVal source As T) As T
    Dim serializer As New DataContractSerializer(GetType(T))
    Using ms As New MemoryStream
        serializer.WriteObject(ms, source)
        ms.Seek(0, SeekOrigin.Begin)
        Return DirectCast(serializer.ReadObject(ms), T)
    End Using
End Function

نصائح أخرى

وICloneable غير متوفر في Silverlight 4 (أنا لا أعرف عن 1/2/3 أو النسخة القادمة). يتم إزالته من واجهات برمجة التطبيقات العامة سيلفرلايت 4 ل. مساعدة من التعليمات البرمجية مايك شال. انها تعمل بالنسبة لي.

public LayerDto Clone(LayerDto source)
    {

        DataContractSerializer serializer = new DataContractSerializer(typeof(LayerDto));
        using (MemoryStream ms = new MemoryStream())
        {
            serializer.WriteObject(ms, source);
            ms.Seek(0, SeekOrigin.Begin);
            return (LayerDto)serializer.ReadObject(ms);
        }
    }

وكيفية إنشاء استنساخ إذا كان لي المصدر IEnumerable. ويتميز هذا LayerDto أيضا نوع الكائن (على سبيل المثال MetaItemDto).

والرمز:

والطبقة العامة LayerDto { }
MetaItemDtoList الطبقة الجمهور: System.Collections.ObjectModel.ObservableCollection { }

والعام استنساخ IEnumerable ثابت (المصدر IEnumerable)

{

        IEnumerable<LayerDto> layers;

        DataContractSerializer serializer = new DataContractSerializer(typeof(IEnumerable<LayerDto>));
        using (MemoryStream ms = new MemoryStream())
        {
            serializer.WriteObject(ms, source);
            ms.Seek(0, SeekOrigin.Begin);
            //return (IEnumerable<LayerDto>)serializer.ReadObject(ms);
            layers = (IEnumerable<LayerDto>)serializer.ReadObject(ms);
            return layers;
        }

و}

ولكن ما هو مشكلة أواجهها هو أن طبقة لا تظهر انها metaItems (لكل طبقة).

وأعتقد تركت وظيفة الاستنساخ القياسية من أن يبقيه بسيط وخفيف الوزن. أعتقد أنك يمكن أن تستخدم إما JSON أو التسلسل XML لتحقيق نفس الشيء على الرغم من. غير متأكدة من تكاليف الأداء بالرغم من ذلك.

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