C# JSON数据反序列化错误
因此,我有一个自定义类:C# JSON数据反序列化错误,c#,json,ajax,C#,Json,Ajax,因此,我有一个自定义类: public class CompanyInfo { public int CompanyID { get; set; } public BasicInfo BasicInfo { get; set; } public EmployeesInfo EmployeesInfo { get; set; } ... } 在我看来,我想将数据发送回我的控制器功能: [HttpPost] public JsonResult SaveCompa
public class CompanyInfo
{
public int CompanyID { get; set; }
public BasicInfo BasicInfo { get; set; }
public EmployeesInfo EmployeesInfo { get; set; }
...
}
在我看来,我想将数据发送回我的控制器功能:
[HttpPost]
public JsonResult SaveCompanyInfoWithOutBalanceSheet(CompanyInfo model)
{
...
}
Ajax函数如下所示:
function onSubmit(){
basicInfoFormData = $("#basicInfoForm").serialize();
employeesInfoFormData = $("#employeesInfoForm").serialize();
var companyInfoData =
{
basicInfoFormData, employeesInfoFormData
};
$.ajax({
type: "POST",
url: '@Url.Action("SaveCompanyInfoWithOutBalanceSheet")',
dataType: "json",
data: JSON.stringify(companyInfoData),
success: function (result) {
if (result.Success)
secondStepOnSubmit();
else
submitError();
}
});
}
当我运行ajax函数时,我的控制器函数会成功地接收HTTP请求并将其转换为我的自定义类CompanyInfo。然而,这里有一个问题。我的BasicInfo类的最后一个属性是字符串,该属性的名称是Website。如果我在控制器方法中设置了断点,我可以看到绑定器没有正确地反序列化网站属性。以下是Binder分配给网站属性的值:
"test_email_address \",\"employeesInfoFormData\":\"EmployeesInfo.ID=0"
test_email_address是我为网站输入的,但不知何故,活页夹也包含了JSON字符串中EmployeesInfo部分的开头。有什么想法吗?当您希望C ActionSaveCompanyInfo不带BalanceSheet need参数作为modelCompanyInfo时,您应该将数据传递给整个模型,而不是模型的几个属性值 例如,如果您的模型具有以下三个属性
public class CompanyInfo
{
public int CompanyID { get; set; }
public BasicInfo BasicInfo { get; set; }
public EmployeesInfo EmployeesInfo { get; set; }
}
[HttpPost]
public JsonResult SaveCompanyInfoWithOutBalanceSheet(CompanyInfo companyInfo)
{
...
}
控制器的动作如下所示
public class CompanyInfo
{
public int CompanyID { get; set; }
public BasicInfo BasicInfo { get; set; }
public EmployeesInfo EmployeesInfo { get; set; }
}
[HttpPost]
public JsonResult SaveCompanyInfoWithOutBalanceSheet(CompanyInfo companyInfo)
{
...
}
因此,在javascript函数中,您需要获取分配给html控件的值。生成模型的正确结构并将其作为参数传递
在您的模型中,它包含一个int属性和两个单独的类作为其他两个属性。因此,在发送参数时,请创建适当的结构并传递它。应该行得通
function onSubmit(){
var companyIdValue = $("#yourcompanyidtextbox").val();
//Ensure the basicInfoFormData contains all the property values of BasicInfo class
var basicInfoFormData = $("#basicInfoForm").serialize();
//Ensure the employeesInfoFormData contains all the property values of EmployeesInfo class
var employeesInfoFormData = $("#employeesInfoForm").serialize();
var companyInfo =
{
CompanyID : companyIdValue,
BasicInfo : basicInfoFormData,
EmployeesInfo : employeesInfoFormData
};
$.ajax({
type: "POST",
contentType: 'application/json; charset=utf-8',
url: '@Url.Action("SaveCompanyInfoWithOutBalanceSheet")',
data: JSON.stringify(companyInfo),
success: function (result) {
if (result.Success)
secondStepOnSubmit();
else
submitError();
},
error: function (request, textStatus, errorThrown) {
alert("Status: " + textStatus + "Error: " + errorThrown);
}
});
}
希望您清楚。您需要在请求对象中设置specify contentType:application/json,默认情况下,jQuery x-form-url-对正文进行编码。它是否按照上面的注释contentType:application/json工作?@AluanHaddad嘿,我尝试添加contentType:application/json,但没有工作,实际上,现在我的控制器函数中的模型是空的。确切地说,当您希望您的C方法EditAssetOnboarding Required参数作为模型时,您应该用数据传递整个模型,而不是model@AluanHaddad我很困惑,我该怎么办?