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

时间:2014-08-22 16:28:36

标签: c# asp.net-mvc json.net

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

即:

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

myOrder = (Order)myObject;

代码更多的是解释我的问题。我明白可以做到这一点:

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

但是由于这是一个辅助函数,所以它不能是&#34; order&#34;,而是更通用的东西。

感谢。

编辑:

获取错误:

Getting Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Order'

2 个答案:

答案 0 :(得分:3)

我会在这里做出一个假设,因为问题不是100%明确,但我认为我有一个好主意:

  

但是由于这是一个辅助函数,所以它不能是&#34; order&#34;,而是更通用的东西。

您需要在辅助函数中添加一个类型参数:

public class SomeHelper
{
    public T Deserialize<T>(string json)
    {
        return JsonConvert.DeserializeObject<T>(json);
    }
}

使用它:

SomeHelper helper = new SomeHelper();
string json = "...";
Order order = helper.Deserialize<Order>(json);

答案 1 :(得分:1)

不是反序列化为object,而是使用反序列化为JToken的内容更容易。

JToken myObject = JsonConvert.DeserializeObject<JToken>(myJsonValue);

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

Order order = myObject.ToObject<Order>();