如何在c#中反序列化JSON数据并从中获取值
我已经序列化了我的mvc表单,现在想在c#中反序列化它。请帮助我解决这个问题。以下是我的前端代码如何在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(
<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"];
}