从json.net发现输出类

时间:2012-05-15 20:23:54

标签: c# json.net

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

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

那我该如何找到?

以下是一个例子:

    public class insideBleah
{
    public int BProperty
    { get; set; }
}

public class bleah
{
    public int AProperty
    { get; set; }

    public insideBleah Inside
    { get; set; }
}

    var bleah = new bleah();
    bleah.AProperty = 1;
    bleah.Inside = new insideBleah();
    bleah.Inside.BProperty = 2;

    var output = JsonConvert.SerializeObject(bleah, new JsonSerializerSettings()
        {
            TypeNameHandling = TypeNameHandling.Objects
});

这会产生输出字符串:

"{\"$type\":\"jsontest.bleah, jsontest\",\"AProperty\":1,\"Inside\":{\"$type\":\"jsontest.insideBleah, jsontest\",\"BProperty\":2}}"

所以我可以看到那里的课程。它太近了!但我似乎无法取笑这些信息。

我该怎么做?我不能这样做:

var newObject = (bleah)JsonConvert.DeserializeObject<bleah>(output);

因为我不知道这是'bleah'。

我该如何处理?

提前致谢

1 个答案:

答案 0 :(得分:1)

为什么你可以使用:

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