如何在 asp.net 中反序列化 Json-Object

Posted

技术标签:

【中文标题】如何在 asp.net 中反序列化 Json-Object【英文标题】:how to deserialize Json-Object in asp.net 【发布时间】:2020-07-22 02:50:30 【问题描述】:

我可以通过使用 Ajax-Call 将元素添加到 Code-Behind 但我无法反序列化 asp.net中Code-Behind中的元素

这是我的 Ajax 调用

function responseData2() 

    var demodata = [];

    var oListbox = $("#submitlistbox2").each(function () 
        var data = $(this).text() + " " + $(this).val() + "\n";
        alert("The Names are: " + data);

        demodata.push(
            var_name_data: data,
        );
    );

    $.ajax(
        url: "url",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        cache: false,
        data: " 'selectedJobSheet': '" + demodata + "'",
        success: function (data) 
            data = $.parseJSON(data.d);
            alert(data);
            alert("success");
        ,
        error: function (response) 
            alert(response);
            alert("error");
        
    );

我的代码隐藏:如何在代码隐藏中检索元素:我的 ajax 调用以单个字符串值“[object Object]”返回数据

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object Details4(string selectedJobSheet)
    
    try
    
        string constr = ConfigurationManager.ConnectionStrings["Constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        
            using (SqlCommand cmd = new SqlCommand("select customer_id,first_name from jobsheetDetails", con))
            
                string _data = "";
                cmd.CommandType = CommandType.Text;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                
                    _data = JsonConvert.SerializeObject(ds.Tables[0]);
                
                return _data;
            

        
    
    catch (Exception)
    
        throw;
    

如何反序列化元素以及如何将元素绑定到列表或数组

【问题讨论】:

使用 JSON 库,例如 NewtonSoft.JSON 并将 JSON 反序列化为模型。但是你应该注意你只发送一个对象,所以你根本不需要列表或数组 在 .NET Core 3.0 或更高版本中,有 System.Text.Json 命名空间来序列化和反序列化 json(作为 Newtonsoft.JSON 的替代品),它在 Web 应用程序中默认启用 如果添加 Rows likeJsonConvert.SerializeObject(ds.Tables[0].Rows),结果是否相同? 这能回答你的问题吗? Convert datatable to JSON in C# 代码中的 try/catch 有什么意义? 【参考方案1】:

考虑下面的代码。

function responseData2() 
  var demodata = [];
  var oListbox = $("#submitlistbox2").each(function() 
    var data = $(this).text() + " " + $(this).val() + "\n";
    alert("The Names are: " + data);
    demodata.push(
      var_name_data: data,
    );
  );
  $.ajax(
    url: "url",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    cache: false,
    data:  selectedJobSheet: demodata ,
    success: function(results) 
      data = $.parseJSON(results.d);
      alert(data);
      alert("success");
    ,
    error: function(response) 
      alert(response);
      alert("error");
    
  );

这会将对象传递给您的帖子数据。您构建它的方式是传递一个字符串,并且不会包含您期望的数据。 .NET 可以像往常一样将其读取为请求。

由于demodata 是一个对象数组,所以当您编写时:

" 'selectedJobSheet': '" + demodata + "'"

这将创建一个字符串:

 'selectedJobSheet': '[object Object],[object Object],[object Object]'

所以它不会传递你想要的细节。你可以试试$.param():

data: $.param( 'selectedJobSheet': demodata );

【讨论】:

以上是关于如何在 asp.net 中反序列化 Json-Object的主要内容,如果未能解决你的问题,请参考以下文章

有人愤怒地使用带有 asp.net-mvc 的 Knockoutjs 吗? [关闭]

如何在 C# 中反序列化多个 JSON 对象?

如何在 C# 中反序列化具有前缀的 XML

如何在 C# 中反序列化具有属性的 XML [重复]

如何在我的 graphQL 上下文中反序列化用户

如何在 Weka-for-Android 中反序列化保存的模型