0

リフレクションに基づいて一連のオブジェクトを動的に構築し、それをシリアル化するプロジェクトを行っています(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);

私はそれが「ブレ」であることを知らないからです。

どうすればこれを処理できますか?

前もって感謝します

4

1 に答える 1

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
于 2012-05-15T20:38:52.587 に答える