无法使用Newtonsoft序列化程序从BSON使用collection属性反序列化对象

时间:2013-10-30 08:44:40

标签: c# serialization json.net bson

我想序列化以下对象:

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。 看起来结果流不包含任何类型信息,并且在反序列化期间不会调用我的绑定器。

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

您需要将BsonReadRootValueAsArray设置为true
詹姆斯在这里的回答:https://stackoverflow.com/a/16949792