Словарь в Json C # - PullRequest
       2

Словарь в Json C #

0 голосов
/ 12 марта 2012

Вот как я называю метод:

{"email":"xxx@hotmail.com","json":{"some1":"some1", "id":1},"yyy":"yyy"}

И мой метод имеет следующие параметры:

MyMethod(string email, Dictionary<string, object> json, string timestamp){...}

И когда я вызываю его с вышеупомянутыми параметрами, вызывается метод, но json не содержит ничего. Счетчик равен 0. Почему это происходит? Как это решить?

1 Ответ

1 голос
/ 12 марта 2012

Стандартный сериализатор JSON не поддерживает это из коробки, однако JSON.NET и System.Web.Script.Serialization.JavaScriptSerializer поддерживают это, проверьте ответы на аналогичный вопрос:
Как я могу десериализовать JSON в простой словарь <строка, строка> в ASP.NET?

JSON.NET будет сериализатором json по умолчанию для ASP.NET 4.5 WebAPI, поэтому вы можете ожидать, что он будет поставляться с ASP.NET + и получить поддержку от MS.

UPDATE
Для того чтобы ASP.NET правильно связал модель, вам нужен специальный связыватель модели:

 public class DictionaryModelBinder : IModelBinder
  {
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
      var serializer = new JavaScriptSerializer();
      var value = controllerContext.RequestContext.HttpContext.Request.Form["json"];
      return serializer.Deserialize<Dictionary<string, object>>(HttpUtility.UrlDecode(value));
    }
  }

И добавьте связыватель новой модели в связыватели модели приложения в методе Application_Start:

  protected void Application_Start()
  {          
    ModelBinders.Binders.Add(typeof (Dictionary<string, object>), new DictionaryModelBinder());
    RegisterRoutes(RouteTable.Routes);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...