2012-02-24 17 views
8

मैं सेवास्टैक में जटिल प्रकारों की सूची कैसे पास करूं? उदाहरण के लिए मेरे अनुरोध डीटीओ इस तरह दिखता है:क्वेरी स्ट्रिंग में जटिल प्रकारों की सूची कैसे पास करें?

//Request DTO 
public class Test 
{ 
    public IList<Fund> Funds { get; set; } 
} 

public class Fund 
{ 
    public string Key { get; set; } 
    public int Percent { get; set; } 
} 

मैं HTTP GET के माध्यम से धारावाहिक वस्तु कैसे पारित कर सकते हैं?

http://localhost:49490/api/funds={ ?? } 

KeyValueDataContractDeserializer: प्रकार परिभाषाएँ एक '{' स्ट्रिंग, धारावाहिक प्रकार 'फंड' की उम्मीद कर, मिल गया के साथ शुरू से शुरू होना चाहिए: asdf

उत्तर

10

ServiceStack का उपयोग कर क्वेरी स्ट्रिंग पार्स त्रुटि टाइप करने के लिए परिवर्तित JSV Format यह मूल रूप से सीएसवी-शैली उद्धरण के साथ जेएसओएन है (यानी केवल आपके मूल्य से बचने पर कोट्स की आवश्यकता होती है)।

हालांकि आप एक कस्टम मार्ग यहां परिभाषित नहीं किया है, ज्यादातर मामलों में अपने कस्टम मार्ग अपने अनुरोध डीटीओ जो इस मामले में टेस्ट नहीं /धन है के समान है।

तो एक कस्टम मार्ग संभालने लगता है:

: http:

Routes.Add<Test>("/test"); 

आप एक QueryString तरह के माध्यम से आपकी सेवा कॉल कर सकते हैं // स्थानीय होस्ट: 49,490/API/परीक्षण फंड = [{कुंजी? : कुंजी 1, प्रतिशत: 1}, {कुंजी: कुंजी 2, प्रतिशत: 2}]

एक तरफ नोट डीटीओ पर इंटरफेस आम तौर पर एक बुरा विचार है, आपको हर समय इसके उपयोग से बचने (कम से कम सीमित) पर विचार करना चाहिए।

+0

धन्यवाद, काम करता है! "डीटीओ पर इंटरफेस आम तौर पर एक बुरा विचार" के साथ आपका क्या मतलब है? इस मामले में आप कैसे पास/डिजाइन करेंगे? –

+4

मैं आईएलिस्ट से बाहर ले जाऊंगा - यानी सिर्फ सूची है। यदि आप कुछ धारावाहिकों की तुलना में कंक्रीट प्रकारों की आपूर्ति नहीं करते हैं जो वास्तव में इंटरफेस का समर्थन करते हैं तो तार पर गतिशील प्रकार की जानकारी को उत्सर्जित करना पड़ता है, अनावश्यक रूप से पेलोड को सूजन और धारावाहिक प्रत्यारोपण के प्रारूप को जोड़ना होता है। डीटीओ पर इंटरफेस रखने के लिए कोई अच्छा/वैध कारण भी नहीं है। – mythz

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