如何在c#中反序列化JSON数据并从中获取值

时间:2015-08-04 09:18:44

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

我已经序列化了我的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);
}

3 个答案:

答案 0 :(得分:0)

使用Newtonsoft.Json.dll对C#

中的json数据进行序列化和反序列化

答案 1 :(得分:0)

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

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;
    }

答案 2 :(得分:-1)

1)。在客户端上将表单编码为JSON STRING

//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 STRING解码为字典,以便您可以按名称检索元素 在服务器端,您将处理一个包含JSON对象数组的字符串,每个对象都有两个属性,即名称和值。这很好地转换为C#Dictionary<string,string>

   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回服务器。