سؤال

لديّ خدمة ويب تستند إلى WSE 3.0 ، وتطبيق عميل WinForms يستخدم الأنواع المحددة في مراجع هذه الخدمة.

ومع ذلك ، عندما أقوم بتمرير مثيل للفئة الفرعية إلى خدمة الويب ، على الرغم من أنني أعود بشكل صريح إلى النوع الأصلي ، أحصل على المخيف:

استخدم سمة XmlinClude أو SoapinClude لتحديد الأنواع غير المعروفة بشكل ثابت.

في إشارة إلى نوعي المشتق.

ملخص الكود:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

يمكنني الالتفاف على هذا من خلال إنشاء مثيل محدد بشكل صريح وإجراء نسخة عميقة من الحقول ذات الصلة. هل هناك طريقة أفضل؟

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

المحلول

نظرًا لأن جهاز Serializer XML يستخدم الانعكاس للعمل مع الكائنات ، فلا توجد طريقة لمنعه من رؤية أن مرجع الفئة الأساسية الخاصة بك يشير إلى مثيل لفصلك المشتق. نعم ، يجب أن تستخدم XmlInclude.

OTOH ، هل فكرت في استخدام فئات جزئية لإضافة وظائف إلى فئات الوكيل الأصلية؟ بهذه الطريقة ، لن تحتاج إلى فئة مشتقة على الإطلاق.

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