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