Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从服务器端代码反序列化JSON_C#_Jquery_Asp.net - Fatal编程技术网

C# 如何从服务器端代码反序列化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();

假设我的json存储在字符串变量中。我的json看起来像

"{\"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;