C# 无法强制转换类型为';Newtonsoft.Json.Linq.JObject';键入<;MyClass>;
此代码:C# 无法强制转换类型为';Newtonsoft.Json.Linq.JObject';键入<;MyClass>;,c#,json.net,C#,Json.net,此代码: var commandMessage = new CommandMessage { CorrelationId = Guid.NewGuid() }; var json = JsonConvert.SerializeObject(commandMessage); var myCommandMessage = (CommandMessage)JsonConvert.DeserializeObject(json); 给出此错误消息: Additional information: Una
var commandMessage = new CommandMessage { CorrelationId = Guid.NewGuid() };
var json = JsonConvert.SerializeObject(commandMessage);
var myCommandMessage = (CommandMessage)JsonConvert.DeserializeObject(json);
给出此错误消息:
Additional information: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'QueueConnectionStringTester.CommandMessage'
这是CommandMessage类:
public class CommandMessage
{
public Guid CorrelationId { get; set; }
}
我错过了什么 反序列化时需要指定类型 要么:
var myCommandMessage = JsonConvert.DeserializeObject<CommandMessage>(json);
你需要给出你想要的类型。JsonConvert类对CommandMessage类一无所知
public class CommandMessage
{
public Guid CorrelationId { get; set; }
}
static void Main(string[] args)
{
var commandMessage = new CommandMessage { CorrelationId = Guid.NewGuid() };
var json = JsonConvert.SerializeObject(commandMessage);
var myCommandMessage = JsonConvert.DeserializeObject<CommandMessage>(json);
}
公共类命令消息
{
公共Guid CorrelationId{get;set;}
}
静态void Main(字符串[]参数)
{
var commandMessage=newcommandmessage{CorrelationId=Guid.NewGuid()};
var json=JsonConvert.SerializeObject(commandMessage);
var myCommandMessage=JsonConvert.DeserializeObject(json);
}
你能展示你的CommandMessage
类吗?是的,我把它贴在CommandMessage类的代码上了。它就在那里:-)为什么不直接使用JsonConvert.DeserializeObject(json,commandMessage.GetType())代码>?似乎这就是文档想要你做的:好的,简单的答案。只是出于兴趣:当使用非泛型的JsonConvert.DeserializeObject()方法时,返回什么类型?它是一个对象
,还是使用通用签名中的T
类型?在这种情况下,T
会是什么-null
?@GeoffJames反序列化对象的非泛型版本返回object
,然后需要将其转换为您期望的类型,如我上面的回答所示(第二个示例)。如果在没有类型参数的情况下使用重载(正如OP所做的那样),那么将返回JObject。
public class CommandMessage
{
public Guid CorrelationId { get; set; }
}
static void Main(string[] args)
{
var commandMessage = new CommandMessage { CorrelationId = Guid.NewGuid() };
var json = JsonConvert.SerializeObject(commandMessage);
var myCommandMessage = JsonConvert.DeserializeObject<CommandMessage>(json);
}