如何在Web服务中将Json对象转换为自定义类对象?

时间:2010-08-30 10:16:26

标签: c# asp.net jquery web-services json

我想在没有回发的情况下将数据插入数据库的情况。我需要插入大约12到13个字段。我从客户端传递DTO,实际上是Json对象。现在我面临的问题是如何将我在webservice中获得的Json对象转换为“类”(在我的情况下类名是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)
            {                       

            }   
        }); 
   });

正如您所看到的那样,我将数据作为数据传递: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对象转换为“User”类对象?

3 个答案:

答案 0 :(得分:2)

为什么不能修改AddNewUser方法来接受所需的类型。例如,

public bool AddNewUser(User user)

应该作为日志工作,因为用户类型具有默认的公共构造函数,并且从java脚本使用的属性名称与类型的属性名称相同。

答案 1 :(得分:1)

像这样定义你的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) 
 { 

答案 2 :(得分:0)

您的网络服务应接受User对象,而不是Object错误对象。 =)

public bool AddNewUser(User user)

毫无疑问,您的JSON对象需要匹配CLR对象的属性。 (字符串到字符串,bool到bool等)。

这就是尝试而不是将JSON“强制”为业务对象的原因。使用DataContracts将JSON映射到DataContract对象,然后将其映射到业务对象。比试图直接从JSON到业务对象要安全得多。

放手一搏。