JSON 反序列化对象不起作用

本文关键字:不起作用 对象 反序列化 JSON | 更新日期: 2023-09-27 18:37:18

我有以下问题:

(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;
 }

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

JSON 反序列化对象不起作用

您可以使用 JsonConvert.Deserialize 来实现此目的。像这样使用它:

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

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

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

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