आप कस्टम मॉडल बाइंडर के साथ यह काफी आसानी से कर सकते हैं। यहां मेरे लिए क्या काम किया है। (वेब एपीआई 2 और JSON.Net 6 का उपयोग करना)
public class JsonPolyModelBinder : IModelBinder
{
readonly JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var content = actionContext.Request.Content;
string json = content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
bindingContext.Model = obj;
return true;
}
}
वेब एपीआई नियंत्रक इस तरह दिखता है। (नोट: भी नियमित रूप से MVC कार्यों के लिए काम करना चाहिए - मैं भी पहले उनके लिए कुछ इस तरह से किया है।)
public class TestController : ApiController
{
// POST api/test
public void Post([ModelBinder(typeof(JsonPolyModelBinder))]ICommand command)
{
...
}
}
मैं भी ध्यान देना चाहिए कि जब आप JSON को क्रमानुसार, उसे अपने साथ क्रमानुसार चाहिए एक ही सेटिंग, और ऑटो किक बनाने और टाइप संकेत को शामिल करने के लिए इसे एक इंटरफ़ेस के रूप में क्रमबद्ध करें। कुछ इस तरह।
JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
string json = JsonConvert.SerializeObject(command, typeof(ICommand), settings);
स्रोत
2014-03-09 06:36:56
समय के हित में, मैंने एक्सएमएल युक्त स्ट्रिंग को स्वीकार करने के लिए अपने वेबएपीआई पोस्ट को बदलने का फैसला किया है। मैं इस पर वापस सर्कल करने की योजना बना रहा हूं। –