如果我使用new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
将对象序列化为Json,则Json包含类型名称。 E.g。
{
"$type": "MyDomain.Customers.SubscribedToNewsletter, MyDomain",
"NewsletterName": "top",
}
因此,当我使用var evt = JsonConvert.DeserialiseObject(json, settings);
与相同的设置时,我希望它检查Json字符串中编码的$type
并返回该类型的对象。
相反,我得到了JObject
。我不知道实际的类型应该是什么,而不是事先用手检查Json字符串。
围绕此问题的正确途径是什么?
答案 0 :(得分:0)
这适合我。
namespace TypeNameHandlingTest
{
using System;
using Newtonsoft.Json;
public class Foo
{
public string Bar { get; set; }
}
class Program
{
static void Main(string[] args)
{
var foo = new Foo {
Bar = "bar"
};
var settings = new JsonSerializerSettings {
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All
};
var json = JsonConvert.SerializeObject(foo, settings);
object deserialized = JsonConvert.DeserializeObject(json, settings);
Console.WriteLine(deserialized.GetType().AssemblyQualifiedName);
Console.ReadLine();
}
}
}
输出:
TypeNameHandlingTest.Foo, TypeNameHandlingTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
答案 1 :(得分:0)
事实证明我不是正如我在问题中所述,毕竟使用相同的序列化设置进行反序列化。这样做,我相信我已经解决了这个问题。
又多了一些白发。