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 对象。原因是在特定情况下允许类型转换,例如在兼容的原始类型之间(例如 int
和 double
之间)或相关的 class 之间的转换。
例如,如果我们有一个基础 class 和一个派生 class、class Animal
和 class Reptile : Animal
,您可以安全地将 Reptile 类型的对象转换为 Animal ,或者反过来(如果你的对象确实是一个爬行动物,否则你会得到一个错误)。
因此,您的示例代码不起作用的原因是您拥有的 JObject 和您想要获取的 UserAttributes 没有任何关联。正如@StarterPack 已经指出的那样,解决方案是使用通用版本 DeserializeObject<some_type>()
.
我有以下问题:
(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 对象。原因是在特定情况下允许类型转换,例如在兼容的原始类型之间(例如 int
和 double
之间)或相关的 class 之间的转换。
例如,如果我们有一个基础 class 和一个派生 class、class Animal
和 class Reptile : Animal
,您可以安全地将 Reptile 类型的对象转换为 Animal ,或者反过来(如果你的对象确实是一个爬行动物,否则你会得到一个错误)。
因此,您的示例代码不起作用的原因是您拥有的 JObject 和您想要获取的 UserAttributes 没有任何关联。正如@StarterPack 已经指出的那样,解决方案是使用通用版本 DeserializeObject<some_type>()
.