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