JSON反序列化对象不起作用

时间:2016-03-04 12:28:48

标签: c# json linq

我有以下问题:

(UserAttribues)Newtonsoft.Json.JsonConvert.DeserializeObject("{\"username\":\"Someone\"}");

抛出错误:

"Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'UserAttribues'."

这门课很简单:

 [Serializable]
 public class UserAttribues
 {
    public string username;
 }

任何帮助表示赞赏。 (我也试过" {\"用户名\":\" \"某人\" \"}")

2 个答案:

答案 0 :(得分:7)

您可以使用JsonConvert.Deserialize。 像这样使用它:

 var attr = JsonConvert.DeserializeObject<UserAttribues>("{\"username\":\"Someone\"}");

答案 1 :(得分:2)

当您使用非泛型版本的DeserializeObject()方法时,您将获得一个JObject。如错误所示,您无法将此JObject强制转换为UserAttributes对象。原因是在特定情况下允许类型转换,例如在兼容的基元类型之间(例如,在intdouble之间)或在相关的类之间进行转换。

例如,如果我们有一个基类和一个派生类class Animalclass Reptile : Animal,你可以安全地将一个Reptile类型的对象转换为Animal,或者相反(如果你的对象)确实是一个爬行动物,否则你会得到一个错误。)

因此,您的示例代码不起作用的原因是因为您拥有的JObject和您想要获取的UserAttributes没有任何关联。正如@StarterPack已经指出的那样,解决方案是使用通用版本DeserializeObject<some_type>()