public partial class PaymentForm : System.Web.UI.Page
{
public class CartItem
{
public string name { get; set; }
public decimal price { get; set; }
public int quantity { get; set; }
}
public class CartDataRequest
{
public List<CartItem> cart { get; set; }
public decimal finalAmount { get; set; }
}
[System.Web.Services.WebMethod]
public static void StoreCartData(string cartData1)
{
try
{
CartDataRequest cartData = JsonConvert.DeserializeObject<CartDataRequest>(cartData1);
List<CartItem> cartItems = cartData.cart;
decimal finalAmount = Convert.ToDecimal(cartData.finalAmount);
HttpContext.Current.Session["CartData"] = JsonConvert.SerializeObject(cartData1);
System.Diagnostics.Debug.WriteLine("Cart data stored successfully in ASP session.");
System.Diagnostics.Debug.WriteLine("CartData contents: " + HttpContext.Current.Session["CartData"]);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Error storing cart data: " + ex.Message);
throw;
}
}
}
我使用ajax和Web方法将数据从客户端传递到服务器端页面。我可以在第一个函数中反序列化和序列化数据。然后将其传递给单击事件。
protected void btnSubmitOrder_Click(object sender, EventArgs e)
{
try
{
// Retrieve cart data from session
string storedCartData = (string)Session["CartData"];
System.Diagnostics.Debug.WriteLine("Stored Cart Data: " + storedCartData);
if (!string.IsNullOrEmpty(storedCartData))
{
CartDataRequest cartDataRequest = new CartDataRequest();
// Deserialize the JSON string into CartDataRequest object
CartDataRequest cartData = JsonConvert.DeserializeObject<CartDataRequest> (storedCartData); /* at this point the deserialization failed.jumps to error message */
System.Diagnostics.Debug.WriteLine("CartData new contents:" + cartData);
}
else
{ System.Diagnostics.Debug.WriteLine("Stored Cart Data is empty ");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Error processing cart data: " + ex.Message);
string script = "alert('An error occurred during the process')";
ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
}
在本节中,我无法反序列化收到的会话。它跳转到捕获异常处的错误消息。调试面板上的消息是“Newtonsoft.Json.dll 中的‘Newtonsoft.Json.JsonSerializationException’”。
我需要一些有关如何解决该问题并访问会话内数据的指导。然后只有我可以访问数据并将其存储到 SQL 中
TIA。
您可以将反序列化的对象推入会话中。无需再次序列化。
此外,您还没有将您的 Web 方法标记为启用了会话。
所以,你需要这个:
[System.Web.Services.WebMethod(enableSession:true)]
如果没有上述内容,那么保存到会话中的代码将无法工作。
因此,你可以这样做:
HttpContext.Current.Session["CartData"] = cartData1;
现在,稍后在代码中,您可以使用以下方法获取对象:
cartData1 = (List<CartItem>)session["cartData"];
因此,将对象放入会话中,然后您可以自由地取出该对象,并且此时不需要序列化。
因此,将对象存储在会话中,而不是 Json 字符串。
如果您在某个时间点将对象发送回客户端,则只需再次序列化该对象即可。
因此,对于在代码后面的该对象的一般使用,然后保存该对象应该可以正常工作。