无法将类型'Newtonsoft.Json.Linq.JObject'隐式转换为'System.Collections.Generic.IEnumerable <employee>'</employee>

时间:2015-04-09 14:32:31

标签: c# json.net

我有以下代码:

public EmployeeDepartment InsertEmployeeAndDepartment(params dynamic[] employee)
{                
    filteredEmployees.EmployeeRecords = employee[0];           
}

EmployeeRecords 的类型为IEnumerable<Employee>

我收到以下异常:

  

无法隐式转换类型&#39; Newtonsoft.Json.Linq.JObject&#39;到&#39; System.Collections.Generic.IEnumerable&#39;。一个明确的   存在转化(您是否错过了演员?)

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

该消息表明employee[0]作为JObject返回,因此必须对其进行解析才能转换为其他类型的对象。我还没有看到足够的代码知道哪一个最适合您,并且您可能需要采取更多步骤,但类似于动态到强类型映射(使用JObject.ToObject())或强类型JSON解析(使用JsonConvert.DeserializeObject()),如下页所述,应该让您走上正确的道路:

http://weblog.west-wind.com/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing#DynamictoStrongTypeMapping

答案 1 :(得分:3)

您可以使用JavascriptSerializer将动态转换为员工:

public EmployeeDepartment InsertEmployeeAndDepartment(params dynamic[] employee)
{         
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();       
    filteredEmployees.EmployeeRecords = serializer.Deserialize<List<EmployeeRecords >>(employee);           
}

答案 2 :(得分:1)

嗯,你正试图让一个雇员担任可数。尝试:

filteredEmployees.EmployeeRecords = employee; 

您是否有充分的理由在该方法上使用动态参数?

如果你想在你的枚举中只想一个元素,你可以尝试:

filteredEmployees.EmployeeRecords = new [] { employee[0] }; 

虽然我怀疑您在某些时候需要将JSON对象反序列化为Employee对象