C# 如何在反序列化的MongoDB文档中获取对父对象的引用?
我希望有人能帮忙。我开始了解MongoDB的C#驱动程序以及它如何处理序列化。考虑下面的示例类:C# 如何在反序列化的MongoDB文档中获取对父对象的引用?,c#,mongodb,deserialization,C#,Mongodb,Deserialization,我希望有人能帮忙。我开始了解MongoDB的C#驱动程序以及它如何处理序列化。考虑下面的示例类: class Thing { [BsonId] public Guid Thing_ID { get; set; } public string ThingName {get; set; } public SubThing ST { get; set; } public Thing() { Thing_ID = Guid.NewGuid
class Thing
{
[BsonId]
public Guid Thing_ID { get; set; }
public string ThingName {get; set; }
public SubThing ST { get; set; }
public Thing()
{
Thing_ID = Guid.NewGuid();
}
}
class SubThing
{
[BsonId]
public Guid SubThing_ID { get; set; }
public string SubThingName { get; set; }
[BsonIgnore]
public Thing ParentThing { get; set; }
public SubThing()
{
SubThing_ID = Guid.NewGuid();
}
}
请注意,子项具有引用其父项的属性。因此,在创建对象时,我会这样做:
Thing T = new Thing();
T.ThingName = "My thing";
SubThing ST = new SubThing();
ST.SubThingName = "My Subthing";
T.ST = ST;
ST.ParentThing = T;
ParentThing属性被设置为BsonIgnore,因为否则它将在序列化到MongoDB时导致循环引用
当我序列化到MongoDB时,它会以我期望的方式创建文档:
{
"_id" : LUUID("9d78bc5c-2abd-cb47-9478-012f9234e083"),
"ThingName" : "My thing",
"ST" : {
"_id" : LUUID("656f17ce-c066-854d-82fd-0b7249c80ef0"),
"SubThingName" : "My Subthing"
}
问题是:当我反序列化时,我失去了子项对其父项的引用。有没有办法配置反序列化以使ParentThing属性始终是其父文档?来自mongodb网站
实施ISupportInitialize-
驱动程序尊重一个实现ISupportInitialize的实体,该实体包含两个方法:BeginInit和EndInit。在反序列化开始之前和完成之后调用这些方法。它对于在反序列化之前或之后运行操作非常有用,例如处理架构更改或预先计算一些昂贵的操作
因此,
Thing
将实现ISupportInitialize
,函数BeginInit
将保持为空,Endinit
将包含St.ParentThing=this代码>在这种抽象层次上,很难给出明确的答案
一种方法是让类在反序列化后提供钩子。这可能是解决当前问题的最简单方法。否则,同一链接还显示了如何编写自定义序列化程序,但在本例中不需要这样做。darn。19秒!!:-)+从我这里得到1