Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
723 views
in Technique[技术] by (71.8m points)

ajax - How to format JSON for asp.net webmethod that takes class parameter

I have the following webmethod on my asp.net code behind page:

[WebMethod(EnableSession = true)]
public static bool SaveFailureData(SimpleFailureData data)
{

}

SimpleFailureData is defined as the following:

public class SimpleFailureData
{
    public int Id { get; set; }
    public string Comments { get; set; }
    public double Score { get; set; }
    public double Adjustment { get; set; }
    public List<ShutdownData> ShutdownData { get; set; }
}

public class ShutdownData
{
    public int Id { get; set; }
    public string Description { get; set; }
    public bool CausedShutdown { get; set; }
    public string ShutdownType { get; set; }
}

What I am trying to figure out is how to call this webmethod and format my data so that it is projected/parsed into that class correctly so I can use it. I tried sending a json string to the method, but my breakpoint inside the method was never hit (so I assume the method failed to call due to improper data format).

This is the JSON I tried sending and then calling the method:

json = JSON.stringify( {
    Comments: comments,
    Score: score,
    Adjustment: seAdjustmentValue,
    ShutdownData: breakdowns //this is an array of shutdown objects
});

PageMethods.SaveFailureData(json, function(data) {
    return;
});

But this failed to get inside my method. Any tips on what the JSON format should be so that is properly works for passing a class as a parameter?

Here is the JSON I attempted to send to the method:

{
"Comments":"",
"Score":66.66666666666667,
"Adjustment":0,
"ShutdownData":[{"Id":"401","CausedShutdown":true,"ShutdownType":"NORMAL"}]
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Follow the Below step and you will get your required output

Ajax function Call

function CallAjaxRequest() { 
    var Simplefailuredata = {};
    Simplefailuredata.Id = 1;
    Simplefailuredata.Comments = 'Comments-1';
    Simplefailuredata.Score = 500.25;
    Simplefailuredata.Adjustment = 700.25;
    Simplefailuredata.ShutdownData = new Array();
    Simplefailuredata.ShutdownData[0] = new Object({ Id: 2, Description: "Desc-1",  CausedShutdown: true, ShutdownType: "ShutdownType-1" });
    Simplefailuredata.ShutdownData[1] = new Object({ Id: 5, Description: "Desc-2", CausedShutdown: false, ShutdownType: "ShutdownType-2" });
    var object = JSON.stringify({ simplefailuredata: Simplefailuredata });
    $.ajax({
        type: "POST",
        url: "Default2.aspx/GetResponse",
        contentType: 'application/json; charset=utf-8',
        data: object,
        dataType: 'json',
        cache: false
    });
}


<form id="form1" runat="server">
 <div>
 <input type="button" id="btn"  value ="t" onclick="CallAjaxRequest();"   />
 </div>
</form>

Code Behind

public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
[System.Web.Services.WebMethod]
public static string GetResponse(simplefailuredata simplefailuredata)
{
    return "";
}
}



public class simplefailuredata 
{ 
public int Id; 
public string Comments; 
public double Score; 
public double Adjustment; 
public List<shutdownData> ShutdownData; 
} 

public class shutdownData 
{ 
public int Id { get; set; } 
public string Description { get; set; } 
public bool CausedShutdown { get; set; }
public string ShutdownType { get; set; }
}  

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...