C#MongoDb反序列化抽象子文档

时间:2018-01-22 15:19:02

标签: c# mongodb serialization deserialization mongodb-.net-driver

前缀:使用.net 4.6.1,C#7,C#MongoDb 2.5.0

一般问题:

我有一个小类,其中包含一个抽象类型的字段。

[BsonIgnoreExtraElements(true)]
public sealed class FatherAlmighty
{
    [BsonId]
    public ObjectId Id;

    public MyAbstract Item;
}

此外,这个MyAbstract显然是一个抽象类,至少有2个继承类。

[BsonIgnoreExtraElements(true)]
[BsonKnownTypes(typeof(Child1))]
public abstract class MyAbstract
{
    public string DontCare;
}

[BsonIgnoreExtraElements(true)]
public sealed class Child1 : MyAbstract
{
    public string ChildishField;
}

BsonKnownTypes包含从MyAbstract继承的每一种类型的类,但为了简单起见,我只写了1。

我需要做什么:由于架构需求,我需要能够在mongo上向Child1添加(仅添加)字段,然后部署应用程序版本以使用此值。

问题:每当我向文档添加值时,在应用程序部署之前,我都会遇到反序列化问题。 例如,如果我在文档中添加字段AnotherChildishField(注意文档和类),其值为" myStr",我希望所有内容都能正常工作忽略了这个新添加的领域,但错误正在让猫和狗下雨。

  

反序列化类< .....>的Item字段时发生错误:Element' AnotherChildishField'不匹配类< .....>

的任何字段或属性

我错过了什么?几乎所有东西都添加了IgnoreExtraElements。

0 个答案:

没有答案