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



我正在序列化对象并将它们存储在MongoDB数据库中,该数据库不允许以'$'开头的键。我需要多态反序列化,其中JSON。Net支持添加一个名为"$type"的变量。我可以通过简单地将对象存储为字符串来解决这个问题,但是这样我就失去了使用Mongo对存储的数据进行任何过滤/查询的能力。

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

您可以使用BsonDiscriminatorAttribute在MongoDB的c#驱动程序中支持多态序列化。这个主题可能相当复杂,因此查阅有关类映射、标量和分层标识符等注册的文档是有意义的。

在最简单的情况下,它看起来像这样:
[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" }

相关内容

  • 没有找到相关文章

最新更新