我想在没有回发的情况下将数据插入数据库的情况。我需要插入大约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”类对象?
答案 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到业务对象要安全得多。
放手一搏。