2012-09-29 20 views
7

की विरासत और जेएसओएन फॉर्मेटर एक साधारण नियंत्रक कार्रवाई की कल्पना करें IEnumerable<BaseType> Get()। यह बेसटाइप से प्राप्त विभिन्न प्रकारों की गणना देता है।एएसपी.NET वेब एपीआई

<ArrayOfBaseType> 
    <BaseType i:type="DerivedType1"><A>value</A></BaseType> 
    <BaseType i:type="DerivedType2"><B>value</B></BaseType> 
    <BaseType i:type="DerivedType3"><C>value</C></BaseType> 
</ArrayOfBaseType> 

आप देख सकते हैं, व्युत्पन्न वर्ग के प्रकार i:type विशेषता में फैलता है:

ग्राहक एक्सएमएल अनुरोध करता है, परिणाम कुछ इस तरह है।

ग्राहक तथापि JSON अनुरोध करता है, इस जानकारी को याद आ रही है:

[ 
    {"A":"value"}, 
    {"B":"value"}, 
    {"C":"value"} 
] 

यह कैसे तय करने के लिए?

+3

@downvoter: बिना किसी स्पष्टीकरण के, आपका डाउनवोट कुछ भी लायक नहीं है क्योंकि मैं अस्पष्ट होने के बिना प्रश्न में सुधार नहीं कर सकता। –

उत्तर

4

में मदद मिलेगी निम्नलिखित परिवर्तन आवश्यक है:

WebApiConfig.cs निम्न पंक्ति जोड़ना होगा में :

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = 
    TypeNameHandling.Auto; 

यह स्वचालित रूप से एक नई संपत्तिमें परिणाम देगाजब आवश्यक हो।

0

आप अपने वर्ग निम्नलिखित लिखते हैं:

public class MyClass 
{ 
    // properties here 

    public string IType 
    { 
     get 
     { 
      return this.GetType().Name; 
     } 

     set { } 
    } 
} 

हो सकता है, यह आप

+0

वास्तव में नहीं। मेरी आंखों में यह एक हैक है। –

+0

मुझे यकीन नहीं है कि जेसन एक और तरीका मौजूद है। – Khurshid

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