Как преобразовать объект Json в объект класса cutom в веб-сервисе? - PullRequest
1 голос
/ 30 августа 2010

У меня есть сценарий, в котором я хочу вставить данные в базу данных без обратной отправки. Есть около 12-13 полей, которые мне нужно вставить. Я передаю DTO со стороны клиента, которая на самом деле является объектом Json. Теперь проблема, с которой я сталкиваюсь, заключается в том, как преобразовать тот объект Json, который я получил в веб-сервисе, в объект «class» (в моем случае имя класса - User).

<script type="text/javascript" language="javascript">

  $('#<%= btnSaveInfo.ClientID %>').click(function()
  {
        // Initialize the object, before adding data to it.
        //  { } is declarative shorthand for new Object().
        var User = { };
        User.FirstName = $('#<%= txtFirstName.ClientID%>').val();
        User.MiddleName = $('#<%= txtMiddleName.ClientID%>').val();
        User.LastName =  $('#<%=txtLastName.ClientID %>').val();
        User.Gender =  $('table#<%= rdbGenderType.ClientID %> input:radio:checked').val();
        User.DateCreated = Date.UTC();
        User.Description = $('#<%= txtDescription.ClientID%>').val();
        User.DOB = $('#<%= txtDOB.ClientID %>').val();
        User.Location=$('#<%= txtLocation.ClientID %>').val();
        var DTO = {'User' : User};
        var path = 'MyWebService.asmx/AddNewUser';
        $.ajax
        ({
            type: "POST",
            url: path,               
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: JSON.stringify(DTO),
            async:false,
            success: function(msg)
            {                       

            }   
        }); 
   });

как вы можете видеть, я передаю данные как data: JSON.stringify (DTO), . Теперь, как мне преобразовать этот объект JSon в

   [WebMethod]
   [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
   public bool AddNewUser(Object User)
   {
       return UserRepository.AddNewUser(User);
   }

В приведенном выше случае метод AddNewUser принимает объект класса User. Но я получаю ошибку. Итак, как мне преобразовать объект Json в объект класса «Пользователь»?

Ответы [ 3 ]

2 голосов
/ 30 августа 2010

Почему вы не можете изменить метод AddNewUser для принятия необходимого типа. Например,

public bool AddNewUser(User user)

Должен работать как log, поскольку Тип пользователя имеет открытый конструктор по умолчанию, а имена свойств, используемые в java-скрипте, совпадают с именами свойств типа.

1 голос
/ 30 августа 2010

Определите свой User класс следующим образом:

public class User
{
    public User() { }

    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public bool Gender { get; set; }

    public DateTime DateCreated { get; set; }

    public string Description { get; set; }
    public string DOB { get; set; }
    public string Location { get; set; }

}

И отредактируйте подпись веб-службы ...

 [WebMethod] 
 [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)] 
 public bool AddNewUser(User user) 
 { 
0 голосов
/ 30 августа 2010

Ваш веб-сервис должен принимать объект User, а не объект Object err.=)

public bool AddNewUser(User user)

И само собой разумеется, что ваш объект JSON должен соответствовать свойствам вашего объекта CLR.(строка в строку, bool to bool и т. д.).

Вот почему стоит попробовать, а не «принудительно» приводить JSON в бизнес-объект.Используйте DataContracts для сопоставления JSON с объектом DataContract, затем сопоставьте его с вашим бизнес-объектом.Гораздо безопаснее, чем пытаться перейти прямо из JSON к бизнес-объекту.

Пройдите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...