मान लीजिए मैं एक मॉडल हैकैसे इंटरफेस के रूप में मॉडल संपत्ति के साथ ASP.NET वेब एपीआई में पोस्ट करने के
public class NextStepCommand : IMenuCommand
{
public int Step { get; set; }
}
public class VoiceCommand : IMenuCommand
{
public string Message { get; set; }
}
और मैं पोस्ट करना चाहते हैं एएसपी.NET वेब एपीआई सेवा के लिए विभिन्न आदेशों के साथ मेनू। मैं उसे कैसे कर सकता हूँ?
अनुरोध नीचे निर्दिष्ट Name
के साथ एक वस्तु निर्माण करेंगे, लेकिन Next
आदेश अशक्त हो जाएगा:
POST http://localhost/api/menus: {"name":"bob","next":{"step":1}}
Returns 201: {"Name":"bob","Next":null}
डिफ़ॉल्ट वेब एपीआई बाइंडरों की जरूरत सी # प्रकार के मेरे अनुरोध पैरामीटर मैप नहीं कर सकते हैं - निश्चित रूप से यह एक है मुश्किल हिस्सा क्या मैं इंटरफ़ेस-आधारित गुणों के लिए कुछ "ज्ञात-प्रकार" विशेषता का उपयोग कर सकता हूं या क्या इस मामले को संभालने के लिए कोई अन्य दृष्टिकोण है, शायद एक कस्टम मॉडल बाइंडर?
मेरे लिए काम किया वेब एपीआई JSON serializer के लिए .uto 'और एक कमांड के आवश्यक "$ प्रकार" के साथ एक अनुरोध भेजा। लेकिन क्या मैं केवल deserialization के लिए 'TypeNameHandling' सुविधा चालू कर सकता हूं? क्योंकि अब जीईटी सेवाओं में जेएसओएन आउटपुट में मेरे पास बहुत अधिक कचरा है। – whyleee
मिला है कि यह उपयोग करने के लिए '[JsonProperty (TypeNameHandling = TypeNameHandling.All)]' विशिष्ट मॉडल संपत्तियों के लिए (से [Json.NET ब्लॉग] (http://james.newtonking.com/archive/2010/08/13/ संभव है json निवल 3-5 रिलीज-8-3-5-final.aspx))। वेब एपीआई के साथ जांच - यह काम करता है। अब काफ़ी बेहतर। – whyleee
@Youssef मुसावयी - इस प्रश्न पर कोई भी विचार: http://stackoverflow.com/questions/20252027/json-net-web-api-serialization-with-derrived-inherited-types ... कुछ भी साथ किसी भी भाग्य के न होने का! – amcdnl