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;
}
任何帮助表示赞赏。(我也尝试了"{''"用户名":''"''"某人''"''"}")
您可以使用 JsonConvert.Deserialize 来实现此目的。像这样使用它:
var attr = JsonConvert.DeserializeObject<UserAttribues>("{'"username'":'"Someone'"}");
当你使用非泛型版本的 DeserializeObject() 方法时,你会得到一个 JObject。如错误所示,您不能将此 JObject 强制转换为用户属性对象。原因是在特定情况下允许类型转换,例如在兼容的基元类型之间(例如int
和double
之间)或相关的类之间进行转换。
例如,如果我们有一个基类和一个派生类,class Animal
和class Reptile : Animal
,你可以安全地将爬行动物类型的对象转换为动物,或者相反(如果你的对象确实是爬行动物,否则你会得到一个错误)。
因此,示例代码不起作用的原因是,您拥有的 JObject 和您想要获取的用户属性没有任何关系。正如@StarterPack已经指出的那样,解决方案是使用 通用版本 DeserializeObject<some_type>()
.