<closed(reason:json =“”string =“”error)=“”>无法从有效JSON反序列化List <myobject> </myobject> </closed(原因:>

时间:2013-03-26 08:22:59

标签: c# json deserialization

我正在尝试将JSON字符串反序列化为对象列表。 json字符串是从http://jsonlint.com/

验证的有效json

这是字符串

[
{
    "Employee_OID": 18450,
    "First_Name": "ABDUL",
    "Last_Name": "RAJPUT"
},
{
    "Employee_OID": 22446,
    "First_Name": "ABDUL",
    "Last_Name": "KHAN"
}
]

以前我通过以下代码成功地反序列化了单个对象

Employee emp = (new JavaScriptSerializer()).Deserialize<Employee>(hdfEmployees.Value);

但现在当我尝试通过相同的代码反序列化对象列表时

List<Employee> emp = (new JavaScriptSerializer()).Deserialize<List<Employee>>(hdfEmployees.Value);

它给我以下错误

Invalid JSON primitive: <my json string>

我也试过IList和Employee []代替List(正如另一个问题的回答所建议的那样),但没有用。

2 个答案:

答案 0 :(得分:2)

您的错误未与JavaScriptSerializer相关联。我刚刚测试了以下代码:

string input = string.Join(Environment.NewLine, File.ReadAllLines("Input.txt"));
List<Employee> emp = (new JavaScriptSerializer()).Deserialize<List<Employee>>(input);

其中Input.txt包含您的示例输入并且工作得很好= emp是一个包含2个Employee个对象的列表。

Employee类定义为

public class Employee
{

    public int Employee_OID { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
}

如果输入字符串与您的问题样本数据真实匹配,则必须检查输入字符串。

答案 1 :(得分:2)

它对我有用:

public class Employee
{
    public int Employee_OID { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        string json = @"[{""Employee_OID"": 18450,""First_Name"": ""ABDUL"",""Last_Name"": ""RAJPUT""},{""Employee_OID"": 22446,""First_Name"": ""ABDUL"",""Last_Name"": ""KHAN""}]";
        List<Employee> emp = (new JavaScriptSerializer()).Deserialize<List<Employee>>(json);
        Console.WriteLine(emp.First().First_Name);
    }
}

请检查输入