C#ASP.NET在没有JSON.NET的情况下将JSON解析为数据集

时间:2019-04-30 15:45:36

标签: c# asp.net json

不幸的是,我只能访问.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。

2 个答案:

答案 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);
            }