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

如何在c#中反序列化JSON数据并从中获取值,c#,jquery,json,asp.net-mvc-4,serialization,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(

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

用于C#

中json数据的序列化和反序列化使用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;
    }
private static JsonSerializerSettings CreateSettings()
{
var settings=new JsonSerializerSettings();
settings.NullValueHandling=NullValueHandling.Ignore;
settings.ReferenceLoopHandling=ReferenceLoopHandling.Ignore;
settings.DateFormatHandling=DateFormatHandling.MicrosoftDateFormat;
返回设置;
}
私有静态Newtonsoft.Json.JsonSerializer CreateSerializer()
{
var settings=CreateSettings();
返回Newtonsoft.Json.JsonSerializer.Create(设置);
}
公共T反序列化(对象目标)
{
if(target==null)
{
抛出新的ArgumentNullException(“目标”);
}
var结果=默认值(T);
var json=目标为字符串;
if(json!=null)
{
var serializer=CreateSerializer();
使用(var stringReader=newstringreader(json))
{
使用(JsonReader JsonReader=newjsontextreader(stringReader))
{
结果=序列化程序。反序列化(jsonReader);
}
}
}
返回结果;
}
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 35;
字典

使用Newtonsoft.Json;
私有类FormField
{
[JsonProperty(“名称”)]
公共字符串a{get;set;}
[JsonProperty(“价值”)]
公共字符串b{get;set;}
}
私有void ReadFormData(字符串sFormData)
{
//如果在HTML中为两个表单字段指定相同的名称,则会引发此错误。
字典asFormData=JsonConvert.DeserializeObject(sFormData).ToDictionary(x=>x.a,x=>x.b);
//现在可以通过字典中的名称访问表单元素的值
字符串sSearchText=asFormData[“txtsearch”];
}

…此处的代码仅限于序列化和反序列化,您需要获取或将实际的JSON字符串发回服务器。

我不确定。但是您的客户机代码调用
“@Url.Action”(“GetAllCustomers”,“Customer”),
,没有任何参数。。您希望如何在控制器分区
sEcho
sColumns
等中设置值?@CSharper值来自客户控制器,用于这些……但问题是如何在后端获取json转换数据?您指的是哪种数据?实际上,这里只有一个
get
方法,没有post。。您想在哪里反序列化某些内容?@CSharper的简单问题是如何序列化数据…目前我的数据没有正确序列化,我建议您无论如何都要进行序列化和反序列化。我如何使用此dllHi反序列化,有人否决了我的答案,我不明白为什么。如果您有任何建议,我们将不胜感激。
//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());
   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"];
}