您應該能夠以包括在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