سؤال

وأنا باستخدام OpenAccess نموذج قطع. عندما أحاول إلغاء تسلسل كائن مع DataConractSerializer، الخاصية إصدار هذا الكائن هي 0 - ولكن فقط في أكس. إذا كنت تصحيح التعليمات البرمجية ومشاهدة قيمة - انها 1 (أو 2،3 ...)

وإذا قلت قبل التسلسل "الباحث درجة الحرارة = object.Version" في seriazlier يمكن حفظ القيمة.

وهناك قضية كسول، وأنا متأكد. كيف يمكنني اجبار لقراءة / حفظ هذه القيمة دون دعوات صريحة؟

وقصاصات كود: HTTP: //www.telerik.com/community/forums/orm/general-discussions/objectnetworkattacher-vs-datacontractserializer.aspx#775451

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

المحلول

ويجب استدعاء الأسلوب .Retrieve () على الكائن الذي سيتم تحميل كافة الحقول تحميل كسول وسيكون لديك كل البيانات المطلوبة عن التسلسل. نأمل أن يساعد.

نصائح أخرى

وهذا يبدو وكأنه يتم تعيين [DataMember] ضد الميدان (أو التخلف إلى الحقول)، وتجاوز السلوك كسول. إذا يمكنك التحكم في نوع، هل يمكن ربما إضافة طريقة [OnSerializing] أن النظرات الخاطفة في هذه المنشأة السياحية قبل ركلات التسلسل في ... أن الطريقة التي ينبغي أن يكون لها قيمة، وأنك لن تحتاج لوضع الشفرة في أماكن أخرى.

إذا تم إنشاؤه نوع، ونتطلع إلى معرفة ما اذا كان هو partial class. إذا كان الأمر كذلك، يمكنك إضافة partial class آخر من نفس الاسم (ونفس مساحة الاسم)، ووضع طريقة [OnSerializing] بك في وجود ...

مثال (غير تعليق الكتلة الماضي والعمل على انجاحه):

using System;
using System.Runtime.Serialization;
using System.Xml;

class Program {
    static void Main() {
        using (XmlWriter writer = XmlWriter.Create(Console.Out)) {
            new DataContractSerializer(typeof(Foo))
                .WriteObject(writer, new Foo());
        }       
    }
}

[DataContract]
partial class Foo {
    [DataMember(Name="Bar")]
    private int? bar;
    public int Bar {
        get {
            if (bar == null) bar = 27; // somthing lazy
            return bar.GetValueOrDefault();
        }
        set { bar = value; }
    }
}
/* UNCOMMENT THIS
partial class Foo {
    [OnSerializing]
    private void BeforeSerialize(StreamingContext ctx) {
        int tmp = Bar;
    }
}
*/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top