ASP.NET MVC: преобразование JSON в объект C#

Доброго времени суток.

Столкнулся в необходимостью получить преобразование JSON в объект C#. Долго рылся в интернете в поисках решения и, наконец, из всего многообразия информации собрал следующий способ.

На входе имеем строку такого типа:

"{\"usrID\":123,\"usrLogin\":\"login\",\"usrEmail\":\"email\",\"usrName\":\"name\"}"

В результате нужно получить объект C# такого же формата. Я использую ASP.NET MVC, так что подробности кода буду описывать для него.

У меня есть некая модель объекта, которая описывает как раз ту структуру данных, которая приходит в виде JSON. Выглядит следующим образом:

public class UserModel
    {
        /// <summary>
        /// ID пользователя
        /// </summary>
        public int usrID { get; set; }
        /// <summary>
        /// Login
        /// </summary>
        public string usrLogin { get; set; }
        /// <summary>
        /// Email
        /// </summary>
        public string usrEmail { get; set; }
        /// <summary>
        /// Name
        /// </summary>
        public string usrName { get; set; }
    }

Получаемые данные описали. В качестве клиента будет код jQuery:

$.ajax({
    url: "/GetJson/GetUserObject",
    type: "POST",
    data: { json: "{ usrID: 123, usrLogin: \"asd\", usrEmail: \"asd\", usrName: \"asd\" }"},
    success: function () {
        return true;
    }
});

Можно было и проще, через $.post, но раз уж у меня так написано — не стал менять :) Этот код просто отправляет строку, которая представляет собой структуру JSON. Больше никакой смысловой нагрузки там не ищите.
А вот собственно сам action одного контролера:

//подключаем это пространство имен для необходимых функций
using System.Web.Script.Serialization;
namespace MyProject.Controler;
{
    public class GetJson : Controller
    {
        ...

        [HttpPost]
        public MyProject.Models.UserModel GetUserObject(string json)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            MyProject.Models.UserModel user =
                serializer.Deserialize<MyProject.Models.UserModel>(json);
            return user;
        }

        ...
    }
}

Вот собственно и все. На выходе из функции Вы получаете объект, который описан выше в модели.

Еще одно замечание. Если структура объекта и выходных данных JSON не совпадают — это не вызовет ошибок. Просто в полях, где есть совпадение ключей объекта и входных данных будет информация, а там где нет совпадений — некое значение по умолчанию (чаще всего null).



2 Комментарии

  • Максим

    А еще проще так

    [HttpPost]
    public MyProject.Models.UserModel GetUserObject(MyProject.Models.UserModel user)
    {

    }

  • Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    Яндекс.Метрика