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我很困惑,我该怎么办?