Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从json.net中发现输出类_C#_Json.net - Fatal编程技术网

C# 从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

我正在做一个项目,在这个项目中,我基于反射动态构建一组对象,并将其序列化(使用json.net)

我想做的是反序列化它并重新创建对象树,但我不知道最终的类类型

那我怎么知道呢

下面是一个例子:

    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