C# 从json.net中发现输出类
我正在做一个项目,在这个项目中,我基于反射动态构建一组对象,并将其序列化(使用json.net) 我想做的是反序列化它并重新创建对象树,但我不知道最终的类类型 那我怎么知道呢 下面是一个例子:C# 从json.net中发现输出类,c#,json.net,C#,Json.net,我正在做一个项目,在这个项目中,我基于反射动态构建一组对象,并将其序列化(使用json.net) 我想做的是反序列化它并重新创建对象树,但我不知道最终的类类型 那我怎么知道呢 下面是一个例子: public class insideBleah { public int BProperty { get; set; } } public class bleah { public int AProperty { get; set; } public
public class insideBleah
{
public int BProperty
{ get; set; }
}
public class bleah
{
public int AProperty
{ get; set; }
public insideBleah Inside
{ get; set; }
}
及
这将生成输出字符串:
"{\"$type\":\"jsontest.bleah, jsontest\",\"AProperty\":1,\"Inside\":{\"$type\":\"jsontest.insideBleah, jsontest\",\"BProperty\":2}}"
这样我就可以看到里面的班级了。太近了!但我似乎无法理清这些信息
我该怎么做?我做不到:
var newObject = (bleah)JsonConvert.DeserializeObject<bleah>(output);
var newObject=(bleah)JsonConvert.DeserializeObject(输出);
因为我不知道这是一个“荒凉”
我该怎么办
提前感谢为什么您可以使用:
using System;
using Newtonsoft.Json;
namespace ConsoleApplication1
{
class Program
{
private static void Main(string[] args)
{
var bleah = new Person();
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects };
var output = JsonConvert.SerializeObject(bleah, settings);
Console.WriteLine(output);
var deserializeObject = JsonConvert.DeserializeObject(output, settings);
Console.WriteLine(deserializeObject.GetType().Name);
}
}
class Person
{
public string Name { get; set; }
}
}
输出:
{"$type":"ConsoleApplication1.Person, ConsoleApplication1","Name":null}
Person
因为在我反序列化之后,我需要考虑类型,以便查看decorators(属性),以便确定如何处理它。我想我不能这样做dynamic@jackjumper,在这种情况下,只需将
dynamic
替换为object
。svick是正确的,您可以使用newObject.GetType()
,它将返回您的实际类型。因此我使用var newObject=JsonConvert.DeserializeObject(输出)-记住,在我的实际情况下,我不知道类型。然后看看newObject.GetType(),它给了我:{Name=“JObject”FullName=“Newtonsoft.Json.Linq.JObject”}说得很清楚,如果我能弄清楚如何访问$type属性的值(如果我读得正确-我真的是新手),我应该能够自己创建对象。但是反序列化程序对我有什么好处?
{"$type":"ConsoleApplication1.Person, ConsoleApplication1","Name":null}
Person