无法将类型为"Newtonsoft.Json.Linq.JObject"的对象强制转换为类型<MyClass>

Ton*_*ony 12 c# json.net

这段代码:

var commandMessage = new CommandMessage { CorrelationId = Guid.NewGuid() };
var json = JsonConvert.SerializeObject(commandMessage);
var myCommandMessage = (CommandMessage)JsonConvert.DeserializeObject(json);
Run Code Online (Sandbox Code Playgroud)

给出此错误消息:

Additional information: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'QueueConnectionStringTester.CommandMessage'
Run Code Online (Sandbox Code Playgroud)

这是CommandMessage类:

public class CommandMessage
{
    public Guid CorrelationId { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Bri*_*ers 22

您需要在反序列化时指定类型.

或者:

var myCommandMessage = JsonConvert.DeserializeObject<CommandMessage>(json);
Run Code Online (Sandbox Code Playgroud)

要么:

var myCommandMessage = (CommandMessage)JsonConvert.DeserializeObject(json, typeof(CommandMessage));
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要给出类型。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);
    }
Run Code Online (Sandbox Code Playgroud)