WPF идет со многими преимуществами, такими как превосходные функции привязки данных, разделение проблем, разделение дизайна и логики и т.д.
Как разработчик, я наслаждаюсь способностью определить мой UI с помощью XAML в противоположность тому, чтобы быть связанным с разработчиком Windows Forms, и я чувствую себя хорошим, зная, что я могу рассчитывать на другого разработчика, чтобы заставить мое приложение выглядеть хорошим.
Лично я не забочусь, что более старые версии Windows не поддерживаются, но одна из больших проблем с WPF, это, (в настоящее время/когда-либо) не поддерживается Моно ( http://www.mono-project.com ), таким образом, приложения WPF не будут работать на Mac OS или Linux. (Altough приложения Silverlight будет).
, Если у Вас есть время и ресурсы для инвестирования в изучение WPF, сделайте это! Даже если Вы собираетесь быть записью приложения Silverlight для поддержки нескольких ОС.
, Если Вам нужны настольные приложения для работы палки нескольких ОС с SWF.
Я решил свою проблему, реализовав фильтр действий; Пример кода приведен ниже. Из исследования я узнал, что есть еще одно решение, связующее устройство, как takepara , описанное выше. Но я действительно не знаю плюсов и минусов того или иного подхода.
Благодаря сообщению в блоге Стива Джентиле за это решение.
public class JsonFilter : ActionFilterAttribute
{
public string Parameter { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Parameter] = result;
}
}
}
[AcceptVerbs(HttpVerbs.Post)]
[JsonFilter(Parameter="user", JsonDataType=typeof(User))]
public ActionResult Submit(User user)
{
// user object is deserialized properly prior to execution of Submit() function
return View();
}
1. создать привязку пользовательской модели
public class UserModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
User model;
if(controllerContext.RequestContext.HttpContext.Request.AcceptTypes.Contains("application/json"))
{
var serializer = new JavaScriptSerializer();
var form = controllerContext.RequestContext.HttpContext.Request.Form.ToString();
model = serializer.Deserialize<User>(HttpUtility.UrlDecode(form));
}
else
{
model = (User)ModelBinders.Binders.DefaultBinder.BindModel(controllerContext, bindingContext);
}
return model;
}
}
2. добавить привязку модели в событие application_start
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
3. использовать jQuery $ .get / $. разместить в представлении клиентский код JavaScript.
<% using(Html.BeginForm("JsonData","Home",new{},FormMethod.Post, new{id="jsonform"})) { %>
<% = Html.TextArea("jsonarea","",new {id="jsonarea"}) %><br />
<input type="button" id="getjson" value="Get Json" />
<input type="button" id="postjson" value="Post Json" />
<% } %>
<script type="text/javascript">
$(function() {
$('#getjson').click(function() {
$.get($('#jsonform').attr('action'), function(data) {
$('#jsonarea').val(data);
});
});
$('#postjson').click(function() {
$.post($('#jsonform').attr('action'), $('#jsonarea').val(), function(data) {
alert("posted!");
},"json");
});
});
</script>
Вы можете попробовать Json.NET . Документация довольно хороша, и она должна делать то, что вам нужно . Вы также захотите получить JsonNetResult , поскольку он возвращает ActionResult, который можно использовать в приложении ASP.NET MVC. Его довольно легко использовать.
Json.NET также хорошо работает с сериализацией даты. Более подробную информацию об этом можно найти здесь .
Надеюсь, это поможет.
Попробуйте это;
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Submit(FormCollection collection)
{
User submittedUser = JsonConvert.DeserializeObject<User>(collection["user"]);
return View();
}