您应该能够以包括在Json.Net的JsonSerializerSettings
设置为
new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
}
类型信息这将包括名为$type
JSON字符串,给出了一个新的属性Json.Net提供反序列化对象的提示。
您需要在序列化的两侧使用此JsonSerializerSettings
才能正常工作。
点击此处了解详情:http://www.newtonsoft.com/json/help/html/serializetypenamehandling.htm
例
class ExampleClass
{
public string StringProperty { get; set; }
public int IntProperty { get; set; }
}
class Program
{
static void Main(string[] args)
{
var objects = new object[]
{
new ExampleClass(),
new StringBuilder()
};
var json = JsonConvert.SerializeObject(objects, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
});
Console.WriteLine(json);
var deserializedObjects = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
});
foreach (var type in (object[])deserializedObjects)
{
Console.WriteLine(type.GetType());
}
Console.ReadKey();
}
}
输出
{
"$type": "System.Object[], mscorlib",
"$values": [{
"$type": "ConsoleApplication8.ExampleClass, ConsoleApplication8",
"StringProperty": null,
"IntProperty": 0
},
{
"$type": "System.Text.StringBuilder, mscorlib",
"m_MaxCapacity": 2147483647,
"Capacity": 16,
"m_StringValue": "",
"m_currentThread": 0
}]
}
ConsoleApplication8.ExampleClass
System.Text.StringBuilder
试试这个https://dotnetfiddle.net/GSlwIR – jlvaquero
@jlvaquero我已经更新了dotnetfiddle,所以你可以看到错误。 – einord