2010-06-23 24 views
20

मैं डब्ल्यूसीएफ में अमूर्त कक्षाओं के लिए डेटाकंट्रैक्ट को कैसे परिभाषित करूं?अमूर्त कक्षाओं के साथ डब्ल्यूसीएफ का उपयोग

मेरे पास एक वर्ग "व्यक्ति" है जिसे मैं सफलतापूर्वक डब्ल्यूसीएफ का उपयोग करके संवाद करता हूं। अब मैं व्यक्ति से संदर्भित एक नई कक्षा "फू" जोड़ता हूं। सब अभी भी अच्छा है। लेकिन जब मैं फू सार बना देता हूं और उप वर्ग को परिभाषित करता हूं तो यह विफल रहता है। यह संचार पक्ष के साथ सर्वर पक्ष पर विफल रहता है, लेकिन यह वास्तव में मुझे बहुत कुछ नहीं बताता है।

मेरे सरलीकृत परीक्षण के लिए किया जाता कक्षाएं:

[DataContract] 
public class Person 
{ 
    public Person() 
    { 
     SomeFoo = new Bar { Id = 7, BaseText = "base", SubText = "sub" }; 
    } 

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

    [DataMember] 
    public Foo SomeFoo { get; set; } 
} 

[DataContract] 
public abstract class Foo 
{ 
    [DataMember] 
    public int Id { get; set; } 

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

[DataContract] 
public class Bar : Foo 
{ 
    [DataMember] 
    public string SubText { get; set; } 
} 

उत्तर

30

मैंने इसे समझ लिया। आपको "ज्ञात टाइप" का उपयोग करके सार बेस क्लास पर सबक्लास निर्दिष्ट करना होगा। समाधान फू वर्ग पर जोड़ने के लिए होगा: बाहर this link

[DataContract] 
[KnownType(typeof(Bar))] // <------ added 
public abstract class Foo 
{ 
    [DataMember] 
    public int Id { get; set; } 

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

चेक।

+0

बिल्कुल सही। आपका बहुत बहुत धन्यवाद! –

2

दिलचस्प।

मुझे उम्मीद है कि Person कन्स्ट्रक्टर में कोड विफल हो जाएगा क्योंकि आप सीधे सार कक्षा को तुरंत चालू नहीं कर सकते हैं।

+0

अच्छा बिंदु। यही कारण है कि यह असफल रहा? यद्यपि एक समाधान मिला। मेरा अपना जवाब देखें .. – stiank81

संबंधित मुद्दे