【问题标题】:C# don't serialize inherited classC#不要序列化继承的类
【发布时间】:2013-12-28 02:23:54
【问题描述】:

我有一个保存某些数据的类(用于游戏编辑器),为了在我的程序中使用它,它必须继承类 System.Windows.Controls.Image

类如下所示:

public class GameObjectInstance : Image
{
    public string InstanceName { get; set; }
    public string ObjectX { get; set; }
    public string ObjectY { get; set; }
    ...
}

Image 必须被继承,因为我必须在 Canvas 上绘制 GameObjectInstance 才能显示图像,但我还必须保留特定的 GameObjectInstance 数据。

我的程序必须将一些GameObjectInstance 类保存到某处的文件中。 我试图通过序列化来做到这一点,我发现XmlSerializer 不支持这个。我也尝试过使用BinaryFormatter 进行序列化,但这也不起作用。

如何进行序列化以便忽略继承的属性(我不需要保存它们的数据)?

【问题讨论】:

  • 是编辑器使用的数据模型,还是ui使用的ui模型?如果两者兼而有之,那么可能是时候重新考虑模型-视图分离线了。
  • 两者兼而有之,但我不知道如何将它们分开。因为我需要在 UI 中显示所有这些数据,但我仍然需要在那里存储数据。尽管到目前为止,我的编辑器几乎可以完美地处理我的所有设置。
  • 也许我可以GameObjectInstanceView 继承Image 并拥有GameObjectInstance 的属性?
  • 通常,您会创建一个不关心演示的模型。然后,您将构建一个 UI,该 UI 采用模型并将模型呈现到屏幕上。该模型对 UI 一无所知。
  • 我已经做到了。唯一的例外是 GameObjectInstance 类。

标签: c# wpf inheritance serialization


【解决方案1】:

不要从 image 继承,而是在你的类中定义一个 Image 类型的属性。使用 [XmlIgnore] 标记您不想序列化的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2014-10-21
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多