不幸的是,我只能访问.aspx和.aspx.cs文件,不能使用JSON.NET之类的第三方库
string rawJSON = "{\"Task\":\"IR-C\",\"Staff\":\"Doe\"}";
JavaScriptSerializer JSS = new JavaScriptSerializer();
Dictionary<string, object> parsedObj = JSS.Deserialize<Dictionary<string, object>>(rawJSON);
//string strTask = parsedObj["Task"].toString();
string strTask = parsedObj["Task"].ToString();
string strStaff = parsedObj["Staff"].ToString();
lblWebService.Text = "Task: " + strTask + ", Staff: " + strStaff;
如果只有一个条目,我可以使用上面的代码。但是,当我尝试执行多个操作时,会出现错误。
Type 'System.Collections.Generic.Dictionary' is not supported for deserialization of an array.
我得到的JSON结果的格式是这样的(我在创建要测试的字符串时遇到麻烦)
[
{"Task":"IR-C",
"Staff":"Doe"
},
{"Task":"DVI",
"Staff":"Jones"
},
{"Task":"Away",
"Staff":"Smith"
}
]
这是一个非常简单的布局,只有一层。我试图弄清楚如何将其放入C#数据集中,但是我发现的大多数示例都引用了我无法使用的参考JSON.NET。
答案 0 :(得分:2)
我认为接下来是您的情况,您要反序列化的不是字典,而是数组/列表,要解决此问题,您可以创建具有这两个属性的类:
public class MyClass
{
public string Task { get; set; }
public string Staff { get; set; }
}
,稍后您可以使用它反序列化您的JSON,如下所示:
List<MyClass> parsedObj = JSS.Deserialize<List<MyClass>>(rawJSON);
答案 1 :(得分:2)
您可以在同一文件中创建一个类,其名称具有两个属性。
public class TestClass
{
public string Task
{
get; set;
}
public string Staff
{
get; set;
}
}
并且无需使用Newtonsoft.Json库即可进行反序列化的其他代码,您可以直接反序列化。
string rawJSON = "[\r\n {\"Task\":\"IR-C\",\r\n \"Staff\":\"Doe\"\r\n },\r\n {\"Task\":\"DVI\",\r\n \"Staff\":\"Jones\"\r\n },\r\n {\"Task\":\"Away\",\r\n \"Staff\":\"Smith\"\r\n }\r\n]";
JavaScriptSerializer JSS = new JavaScriptSerializer();
List<TestClass> parsedObj = JSS.Deserialize<List<TestClass>>(rawJSON);
foreach ( var obj in parsedObj )
{
Console.WriteLine("Task: " + obj.Task + ", Staff: " + obj.Staff);
}