是否有可能在没有“$”的情况下在JSON.Net中获得多态反序列化?

时间:2013-06-04 13:53:58

标签: mongodb json.net

我将对象序列化并将其存储在MongoDB数据库中,该数据库不允许以' $'开头的密钥。我需要多态反序列化,JSON.Net支持添加名为" $ type"的变量。我可以通过简单地将对象存储为字符串来解决这个问题,但是我无法使用Mongo对存储的数据进行任何类型的过滤/查询。

是否可以将该名称更改为与MongoDB兼容的内容?

1 个答案:

答案 0 :(得分:2)

您可以使用BsonDiscriminatorAttribute来支持polymorphic serialization in MongoDB's C# driver。这个主题可能非常复杂,因此查阅有关类映射,标量和分层鉴别器等注册的文档是有意义的。

在最简单的情况下,它将如下所示:

[BsonDiscriminator(Required = true)]
[BsonKnownTypes(typeof(Cat))]
public class Animal { ... }

public class Cat : Animal { ... }

现在,如果您存储Cat之类的

db.GetCollection<Animal>("Animal").Insert(new Cat());

你会看到

db.Animal.find();
> { "_id" : ObjectId("..."),  "_t" : "Cat" }