使用NewtonSoft将JSON对象反序列化为.Net对象



我得到了一个json对象,我想在不强制转换它的情况下将其反序列化为.Net类型。

我想我在文档中的某个地方读到,您可以将一个属性传递到json中,以便向反序列化器告诉它可以尝试强制转换的.Net对象类型。

我找不到我读这篇文章的地方。

我想避免使用

var myNewObject = JsonConvert.DeserializeObject<MyClass>(json);

要获得类似的东西

MyClass myNewObject = JsonConvert.DeserializeObject(json);

我从HttpRequest获得了json对象,并希望从这个嵌套对象实例化适当的类。目前,反序列化为已知项效果良好,但需要更灵活的方法,而无需通过解析方法管理所有已知对象。

您可以像这样将对象类型保存在json字符串中。

您必须移交转换器的设置

public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
   TypeNameHandling = TypeNameHandling.Objects
};

如何使用给定设置进行序列化:

var json = JsonConvert.SerializeObject(data, Settings);

这就是json字符串的样子:

{
   "$type":"YourNamespaceOfTheClass",
   "YourPropertyInTheClass":valueOfProperty
}

如何使用给定设置进行反序列化:

var object = JsonConvert.DeserializeObject(json, Settings);

现在,json字符串不仅包含序列化对象,还包含序列化对象的类型。因此,在反序列化json字符串时,您不必担心正确的类型。

您可以执行以下操作:

dynamic myNewObject = JsonConvert.DeserializeObject(json);

它将返回一个您可以使用的动态对象。

Console.WriteLine(myNewObject.data[0].description);

显然,如果JSON不包含具有description属性的对象的data数组,那么它将失败。

您可以这样做:

var result = JsonConvert.DeserializeObject<dynamic>(json);

这样就可以反序列化任何对象。Cast-dynamic表示,您正在使用运行时已知的任何类型反序列化任意名称的对象。它确实有效!

相关内容

  • 没有找到相关文章

最新更新