将继承的类保存到MongoDB(C#),但我只想序列化基类成员

时间:2015-12-01 17:37:05

标签: c# mongodb

比方说,我的C#项目中有以下类:

public class AnimalContainer
{
   string SomeData {get; set;}
   AnimalBase Animal {get; set;}
}

public class AnimalBase 
{
   string Name {get; set;}
   int Age {get; set;}
}

public class Cat : AnimalBase
{
   string FurColor {get; set;}
}

现在,如果我创建一个新的Cat,将其放在AnimalContainer中并将其存储到MongoDB,整个猫类将保存到Mongo,而不仅仅是基类成员。

(编辑)在上面的例子中,Mongo上的数据看起来像这样:

{
   "SomeData": "x",
   "Animal": {
      "Name": "Cat Damon",
      "Age": 3,
      "FurColor": "Black"
    }
}

我想知道,我怎样才能确保只有基类被保存到Mongo而不是我目前看到的行为。

1 个答案:

答案 0 :(得分:0)

我曾经发现过一个关于Java流媒体的幻灯片,如何通过网络像流媒体对象这样的瘦身或者保存到某些东西。 如果我能找到它,我会相信它。但是,我发现他的论点非常好,为什么不应该像你那样做。 他建议不要直接传输对象,而是创建第二个包含要保存的数据的对象。

E.g。如果要保存/发送用户对象:

//some constructor which copies the values for stremin
UserStreamingObject DecoratorObject = new UserStreamingObject(User);
Stream.send(DecoratorObject);
//other Site
Stream.receive(DecoratorObject);
User bla = new User(DecoratorObject);

我建议您执行以下操作,因为我不熟悉C#,我会解释一下。 制作某种Copy Constructor,一种从其子类创建动物实例并保存此实例的方法。您必须将实际类型保存在某处以进行反射。因为您可以在数据库中保存数据,而不应该存在数据库,如果C#流引用了对象(如java那样),您可以在数据库中保存大型树。 您不仅可以保存大量数据,还可以保存您不想保存和/或不应保存的数据,如密码或个人数据。