假设我的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();
请指导我如何从json格式的数据反序列化后,如何提取文件和类型等每个组件。感谢
整流
这样我解决了这个问题....这里是整个客户端&amp;服务器端代码。
<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");
}
答案 0 :(得分:6)
我找到的最简单的方法是将Json.NET库与新的.net dynamic对象类型相结合:
string json = "{\"file\":\"dave\",\"type\":\"ward\"}";
dynamic jo = JObject.Parse(json);
string _file = jo.file;
string _type = jo.type;
不要忘记:
using Newtonsoft.Json.Linq;
这是一种非常简单的方法,您无需声明强类型对象,因此可以轻松实现。
答案 1 :(得分:3)
您应该将一个类定义为:
public class YourJsonClass
{
public string file {get;set;}
public string type {get;set;}
}
然后,你会像这样解密:
YourJsonClass sData=jss.Deserialize<YourJsonClass>(json);
根据sData
定义,数据将在YourJsonClass
对象中提供,因此sData.file
将保存文件属性,依此类推。
答案 2 :(得分:1)
我通常将JSON字符串传递给一个将结构化类作为参数的函数/方法。
Javascript对象
"{ q: {file:\"dave\", type:\"ward\"} }"
public class myClass
{
private string _file = string.empty;
public string file {
get { return _file; }
set { _file = value.trim(); }
}
private string _type = string.empty;
public string type {
get { return _type; }
set { _type = value.trim(); }
}
}
public ClassTypeOrVariableType FunctionName(myClass q)
{
//do stuff here
{