我正在开发需要显示复杂的2d矢量图形的Silverlight应用程序。 它从服务器下载压缩的XAML文件,解析它(XamlRead)并注入页面上的布局根目录。 这适用于相当小的xaml文件。问题是我需要使用更大的文件(更多的内容)。例如,我的一个未压缩的xaml文件大20 MB,而XamlRead方法需要很长的工具来解析它。我的问题是,是否有办法在服务器端进行所有解析。最好只将XamlRead方法的序列化二进制输出存储为数据库中的BLOB。但是,当我尝试序列化它时,我收到一条消息“Canvas对象未标记为可序列化”。我真的很感激任何建议。
答案 0 :(得分:2)
Silverlight内置的二进制序列化不多;但是,protobuf-net适用于Silverlight,可能有助于填补这一空白。在当前版本中,您只能真正序列化您控制的类型(由于添加属性) - 但是,我正处于一个大型重构的中间(除其他外)添加对没有属性的序列化类型的支持。
我希望它还有2周左右的时间可用作(希望)稳定版本,但欢迎您随时查看。
请注意,您仍需要提供一些帮助(告诉它您希望它序列化的内容),但它可能很有用。
特别是,数据格式(“协议缓冲区”)被设计为密集且高效的处理,这应该提高解析速度。 See here更多(数字来自主.NET,而不是Silverlight)
答案 1 :(得分:1)
我发现SharpSerializer软件包很容易用于Silverlight中的快速二进制serlization:http://www.sharpserializer.com/en/index.html。您不需要使用Serializable属性 - 但它只序列化公共成员。
答案 2 :(得分:0)
如果解析确实是问题,那么使用名为'BAML'的预编译XAML可能会有所帮助。这是XAML文件的二进制表示。由于二进制格式具有更便宜的解析器而不是太通用的XML,这有很大帮助。 BAML也在.NET编译器内部使用,以生成更紧凑的文件。
有关详情,另请参阅http://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/