2

次のオブジェクトをシリアル化したい:

class Zoo
{
    public List<Animal> Animals { get; set; }
}

class Animal
{
    public Animal(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }
}

class Dog : Animal
{
    public Dog(string name) : base(name)
    {
    }
}

class Cat : Animal
{
    public Cat(string name) : base(name)
    {
    }
}

カスタム バインダーを使用して JSON との間でシリアル化/逆シリアル化することは問題ではありません。

        var settings = new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            Binder = binder
        };

        string json = JsonConvert.SerializeObject(zoo, settings);
        var deserialized = JsonConvert.DeserializeObject<Zoo>(json, settings);

カスタム バインダーの BindToType/BindToName メソッドの両方が、シリアル化/逆シリアル化中に呼び出されます。

BSON で同じ手法を試しましたが、残念ながらうまくいきません。結果は Zoo オブジェクトではなく、JObject です。結果ストリームに型情報が含まれておらず、逆シリアル化中にバインダーが呼び出されないようです。

任意の提案をいただければ幸いです。

4

1 に答える 1