C# 如何从服务器端代码反序列化JSON
假设我的json存储在字符串变量中。我的json看起来像C# 如何从服务器端代码反序列化JSON,c#,jquery,asp.net,C#,Jquery,Asp.net,假设我的json存储在字符串变量中。我的json看起来像 "{\"file\":\"dave\",\"type\":\"ward\"}" 上面的数据像我的字符串变量一样存储。现在我如何反序列化这个json数据并读取每个组件,比如文件和类型 我尝试了下面的代码,但出现了错误 var jss = new JavaScriptSerializer(); string json = new StreamReader(context.Request.InputStream).ReadToEnd();
"{\"file\":\"dave\",\"type\":\"ward\"}"
上面的数据像我的字符串变量一样存储。现在我如何反序列化这个json数据并读取每个组件,比如文件和类型
我尝试了下面的代码,但出现了错误
var jss = new JavaScriptSerializer();
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
var sData=jss.Deserialize<string>(json);
string _file = sData[0].ToString();
string _type = sData[1].ToString();
var jss=new JavaScriptSerializer();
字符串json=newstreamreader(context.Request.InputStream.ReadToEnd();
var sData=jss.Deserialize(json);
字符串_file=sData[0]。ToString();
字符串_type=sData[1]。ToString();
请指导我如何从json格式的数据反序列化后提取每个组件(如文件和类型)。谢谢
整改 这样我就解决了这个问题……下面是整个客户端和服务器端代码
<script type="text/javascript">
$(document).ready(function () {
$('#btnlogin').click(function (e) {
var FeedCrd = {};
FeedCrd["file"] = 'dave';
FeedCrd["type"] = 'ward';
$.ajax({
type: "POST",
url: "CallASHX.ashx",
data: JSON.stringify(FeedCrd),
//data: { 'file': 'dave', 'type': 'ward' },
//dataType: "json",
success: function (data) {
if (data == "SUCCESS");
{
alert('SUCCESS');
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
return false;
});
});
</script>
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
var jss = new JavaScriptSerializer();
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
Dictionary<string,string> sData=jss.Deserialize<Dictionary<string,string>>(json);
string _file = sData["file"].ToString();
string _type = sData["type"].ToString();
context.Response.Write("SUCCESS");
}
$(文档).ready(函数(){
$('#btnlogin')。单击(函数(e){
var FeedCrd={};
FeedCrd[“文件”]=“dave”;
FeedCrd[“类型”]=“病房”;
$.ajax({
类型:“POST”,
url:“CallASHX.ashx”,
数据:JSON.stringify(FeedCrd),
//数据:{'file':'dave','type':'ward'},
//数据类型:“json”,
成功:功能(数据){
如果(数据=“成功”);
{
警惕(“成功”);
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(文本状态);
}
});
返回false;
});
});
公共void ProcessRequest(HttpContext上下文)
{
context.Response.ContentType=“text/html”;
var jss=新的JavaScriptSerializer();
字符串json=newstreamreader(context.Request.InputStream.ReadToEnd();
字典sData=jss.Deserialize(json);
字符串_file=sData[“file”].ToString();
字符串_type=sData[“type”].ToString();
上下文。响应。编写(“成功”);
}
您应该将类定义为:
public class YourJsonClass
{
public string file {get;set;}
public string type {get;set;}
}
然后,你会这样做:
YourJsonClass sData=jss.Deserialize<YourJsonClass>(json);
YourJsonClass sData=jss.Deserialize(json);
根据
YourJsonClass
定义,数据将在sData
对象中可用,因此,sData.file
将保存file属性,依此类推。我通常将JSON字符串传递给以结构化类为参数的函数/方法
Javascript对象
"{ q: {file:\"dave\", type:\"ward\"} }"
我发现的最简单的方法是将库与新的.net对象类型相结合:
string json = "{\"file\":\"dave\",\"type\":\"ward\"}";
dynamic jo = JObject.Parse(json);
string _file = jo.file;
string _type = jo.type;
别忘了:
using Newtonsoft.Json.Linq;
这是一种非常简单的方法,您不必声明强类型对象,因此很容易动态执行。这应该可以帮助您了解它给您带来的错误是什么?总之,我解决了它并发布了我的解决方案。thanks@Constantinius谢谢你的提醒,刚刚更新了答案。不管怎样,我解决了它,也发布了我的解决方案。请再次查看问题。谢谢:)这假设op对Adrian的评论有.net 4可用的精度:。此处需要net4,只是因为答案使用了“dynamic”关键字。Json.Net能够在早期版本的框架上运行。
string json = "{\"file\":\"dave\",\"type\":\"ward\"}";
dynamic jo = JObject.Parse(json);
string _file = jo.file;
string _type = jo.type;
using Newtonsoft.Json.Linq;