JSON 反序列化对象不起作用

JSON Deserialize Object not working

我有以下问题:

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

抛出错误:

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

class 很简单:

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

感谢任何帮助。 (我也试过 "{\"username\":\"\"Someone\"\"}")

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

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

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

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

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