【问题标题】:How to Deserialize JSON data in c# and get values from that如何在 C# 中反序列化 JSON 数据并从中获取值
【发布时间】:2015-08-04 09:18:44
【问题描述】:

我已经序列化了我的 mvc 表单,现在想在 c# 中反序列化它。请帮我解决这个问题。以下是我的前端代码

<input type="search" id="txtsearch">
<input type="button" id="btnsearch" />

<script type="text/javascript">
    $(function () {

        DrawTable(0);

        $('#btnsearch').click(function (e) {

            var searchname = $('#txtsearch').val();
            var form = $('form').serialize();
            //var form = $(this).serializeArray();

            DrawTable(form);

        });



</script>

以下是我想通过反序列化从序列化数据中获取值的方法

public JsonResult GetAllCustomers(string sEcho, string sColumns, int iDisplayStart, int iDisplayLength, string sSearch, int iSortCol_0, string sSortDir_0, string filters, int UserId = 0,string form="") {
    string sortDirection = sSortDir_0;
    DataTableGridModel resultModel = new Logic(x,y ).GetCustomersForGrid(sEcho, sColumns, iDisplayStart, iDisplayLength, sSearch, iSortCol_0, sSortDir_0, UserId);
    return Json(resultModel, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • 我不确定。但是您的客户端代码在没有任何参数的情况下调用"@Url.Action("GetAllCustomers", "Customer")",。您希望如何在控制器操作中获得值sEchosColumns 等?
  • @CSharper 值来自客户控制器,但问题是如何在后端获取 json 转换数据?
  • 您指的是哪些数据?实际上你这里只有一个 get 方法,没有帖子..你想在哪里反序列化一些东西?
  • @CSharper 简单的问题是如何序列化数据......目前我的数据没有正确序列化
  • 无论如何我都会推荐nuget.org/packages/Newtonsoft.Json 进行序列化和反序列化。

标签: c# jquery json asp.net-mvc-4 serialization


【解决方案1】:

在C#中使用Newtonsoft.Json.dll对json数据进行序列化和反序列化

【讨论】:

  • 如何使用这个 dll 反序列化
【解决方案2】:

使用 Newtonsoft.Json.dll 创建以下方法,并通过以字符串格式传递 json 数据来调用反序列化方法。

private static JsonSerializerSettings CreateSettings()
    {
        var settings = new JsonSerializerSettings();

        settings.NullValueHandling = NullValueHandling.Ignore;
        settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        settings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;

        return settings;
    }

private static Newtonsoft.Json.JsonSerializer CreateSerializer()
    {
        var settings = CreateSettings();

        return Newtonsoft.Json.JsonSerializer.Create(settings);
    }

public T Deserialize<T>(object target)
    {
        if (target == null)
        {
            throw new ArgumentNullException("target");
        }

        var result = default(T);
        var json = target as string;

        if (json != null)
        {
            var serializer = CreateSerializer();

            using (var stringReader = new StringReader(json))
            {
                using (JsonReader jsonReader = new JsonTextReader(stringReader))
                {
                    result = serializer.Deserialize<T>(jsonReader);
                }
            }
        }

        return result;
    }

【讨论】:

    【解决方案3】:

    1).在客户端将表单编码为 JSON 字符串

    //in javascript, serialize the form to JSON:
    // -- this will only work if all elements on the form have a name attribute  -
    var stringToReturnToServer = JSON.stringify($('form').serializeArray());
    

    2)。将 JSON 字符串解码为字典,以便您可以按名称检索元素 在服务器端,您将处理一个包含 JSON 对象数组的字符串,每个对象都有两个属性,名称和值。这很好地转换为 C# Dictionary&lt;string,string&gt;

       using Newtonsoft.Json;
    
        private class FormField
        {
            [JsonProperty("name")]
            public string a { get; set; }
    
            [JsonProperty("value")]
            public string b { get; set; }
    
        }
    
        private void ReadFormData(string sFormData)
        {
                //this will throw if you give two form fields the same name in your HTML.
                Dictionary<string,string> asFormData = JsonConvert.DeserializeObject<List<FormField>>(sFormData).ToDictionary(x => x.a, x => x.b);
    
    
               //VALUES OF FORM ELEMENTS NOW ACCESSIBLE BY NAME IN DICTIONARY 
               string sSearchText = asFormData["txtsearch"];
    }
    

    ...这里的代码仅限于序列化和反序列化,您需要将实际的 JSON 字符串 GET 或 POST 回服务器。

    【讨论】:

    • 嗨,有人否决了我的回答,我不明白为什么。如有任何建议,我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2021-05-30
    • 2016-05-14
    • 2017-03-14
    相关资源
    最近更新 更多