如何将 Newton.Json 反序列化的通用对象转换为自定义对象?

Sam*_*lly 5 c# asp.net-mvc json.net

我正在使用 Newton 的 Json.Net 将 Json 反序列化为 .NET 对象。我试图了解是否可以从一般对象转换为特定对象。

IE:

object myObject JsonConvert.DeserializeObject<object>(myJsonValue);

myOrder = (Order)myObject;
Run Code Online (Sandbox Code Playgroud)

该代码更多地是关于描述我的问题。我知道可以这样做:

object myObject JsonConvert.DeserializeObject<order>(myJsonValue);
Run Code Online (Sandbox Code Playgroud)

但由于这是一个辅助函数,所以它不能是“订单”,而是更一般的东西。

谢谢。

编辑:

得到错误:

Getting Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Order'
Run Code Online (Sandbox Code Playgroud)

Gre*_*rdt 5

我将在这里做一个假设,因为这个问题不是 100% 清楚,但我想我有一个好主意:

但由于这是一个辅助函数,所以它不能是“订单”,而是更一般的东西。

您需要向辅助函数添加类型参数:

public class SomeHelper
{
    public T Deserialize<T>(string json)
    {
        return JsonConvert.DeserializeObject<T>(json);
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

SomeHelper helper = new SomeHelper();
string json = "...";
Order order = helper.Deserialize<Order>(json);
Run Code Online (Sandbox Code Playgroud)


Sam*_*ell 5

与反序列化为 相比,使用反序列化为object的东西更容易JToken

JToken myObject = JsonConvert.DeserializeObject<JToken>(myJsonValue);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用该JToken.ToObject<T>()方法执行最终转换:

Order order = myObject.ToObject<Order>();
Run Code Online (Sandbox Code Playgroud)