2010-08-11 63 views
4

我们可能需要为我们的(大型的)C#应用程序中的类编写我们自己的序列化程序 - BinarySerializer太慢且冗长,并且protobuf-net在基于接口的属性我们有负载)。在C#中实现我们自己的序列化程序 - 提示和陷阱

有没有人有任何好的提示和/或警告?我怀疑我们应该使用BinaryWriterBinaryReader,但是我们还没有在C#中做太多的小工具,任何陷阱都将不胜感激!

同样,有没有人知道我可以看到的源代码的手动序列化器?

+0

你的时间表是什么?我可以尝试整理V2(但我已经说了太久了) – 2010-08-11 21:40:54

+0

DataContractSerializer'怎么样? – 2010-08-11 21:48:22

+0

@Marc:那会很棒,但对我们来说可能不够快,因为我们需要时间来学习如何正确使用protobuf。 – 2010-08-11 22:36:59

回答

0

考虑Type Convertors。我们在ViewState中广泛使用它们,它们工作得很好。

+0

不要去切线 - 但将序列化对象注入ViewState是我今天听到的最可怕的事情 – 2010-08-11 22:22:20

+0

Pete - 这就是ASP.net在维护后期状态方面的功能。这就是ViewState的用途。 – Fahad 2010-08-12 20:13:43

3

提示/警告?它可以是一个严重的代码量。我建议编写一些简单的代码可以更容易,该代码可将现有模型转换为简单的DTO,并可通过您选择的现有序列化API轻松进行序列化。拥有一个DTO层(独立于域实体)还允许更简单的维护 - 您可以在不破坏序列化数据的情况下重构您的域实体。

为自己做的选项(记住,你强调的是,该模型是相当复杂的保留,你是不是位小提琴手):

  • 写入特定类型的系列化手动;很容易出错,非常费力
  • 写一个通用库;疯狂的金额工作解决所有的边缘情况

这是后,你已经想出了一个序列化格式,工作有力,可延伸,并支持你所需要的场景(继承等)。

+0

我们不是* C#* bit-fiddlers;事实上,我不是什么人,但我的同事当然是。 – 2010-08-11 22:39:38

+0

我看不出DTO层如何加快序列化。这个问题可能在于.Net BinarySerializer固有的罗嗦,连同所有时髦的反射等等,它必须做一般的工作。 DTO层不会改变,是不是? – 2010-08-12 12:31:31

+0

@Joel - 好吧,也许如果DTO被设计为适合protobuf-net; p – 2010-08-12 18:31:17