我有一个通用的形状集合,我需要通过WCF存储到数据库中以供将来/共享使用。不幸的是,System.Windows.Shapes都是密封的,所以我不能继承它们并制作它们的可序列化副本。我“可以”编写我自己的自定义可串行形状集,因为我已经为我的应用程序编写了3个自定义形状,但是如果可能的话我不想这样做。
我完全清楚我可以使用XAMLReader和XAMLWriter将它们从屏幕上移开并放回去,但这还不够好,因为包含形状的Grid的大小并不总是同样,我需要相应地重新定位形状。这些形状被用作另一幅图像的叠加层,形状与背景图像保持在同一位置非常重要。
任何想法或帮助都将不胜感激。
〜的md5sum〜
答案 0 :(得分:3)
另一个解决方案是创建序列化方法,该方法作为参数形成,并将属性序列化为xml或任何你想要的。一个例子就是:
/// <summary>use reflection to serialize all properties and type into an xml string</summary>
/// <param name="s">shape object to be serialized</param>
/// <return>the serialized xml string</return>
public static string SerializeShape(Shape s);
/// <summary>create a new Shape object with given xml data</summary>
/// <param name="s">xml serialization generated by SerializeShape(Shape s)</param>
/// <return>the constructed shape</return>
public static Shape DeserializeShape(string s);
您可能需要稍微更改方法以更好地适应您的对象。最糟糕的情况是,您必须为不同的形状创建几对序列化/反序列化方法。
答案 1 :(得分:0)
我建议你创建“精简”形状(就像今日美国是“精简”新闻)。只需输入完全定义每个形状所需的最小属性:
当你反序列化它们时,你将实例化实际的System.Windows.Shapes,但你不必重新创建整个事物。