在C#中实现我们自己的序列化程序

在C#中实现我们自己的序列化程序,c#,serialization,bit-manipulation,C#,Serialization,Bit Manipulation,我们可能需要为(largeish)C#app-BinarySerializer中的类编写我们自己的序列化程序。BinarySerializer太慢和冗长,并且在基于接口的属性(其中我们有负载)方面存在问题 有人有什么好的提示和/或警告吗?我想我们应该使用and,但我们还没有在C#中做太多的修改,任何gotchas都将不胜感激 类似地,有没有人知道我可以查看源代码的手动序列化程序。我们在ViewState中广泛使用它们,它们工作得很好。提示/警告?这可能是大量的代码。我建议编写一些简单的代码,将现

我们可能需要为(largeish)C#app-BinarySerializer中的类编写我们自己的序列化程序。BinarySerializer太慢和冗长,并且在基于接口的属性(其中我们有负载)方面存在问题

有人有什么好的提示和/或警告吗?我想我们应该使用and,但我们还没有在C#中做太多的修改,任何gotchas都将不胜感激


类似地,有没有人知道我可以查看源代码的手动序列化程序。我们在ViewState中广泛使用它们,它们工作得很好。

提示/警告?这可能是大量的代码。我建议编写一些简单的代码,将现有模型转换为简单的DTO,通过选择现有的序列化API,可以轻松地对DTO进行序列化。拥有DTO层(独立于域实体)还允许更简单的维护——您可以重构域实体,而无需中断序列化数据

自己动手的选项(请记住,您强调模型相当复杂,而且您不是一个小提琴手):

  • 手动编写特定于类型的序列化;很容易出错,很费力
  • 编写通用库;大量的工作解决了所有的边缘问题

也就是说,您已经找到了一种工作稳定、可扩展并支持您需要的场景(继承等)的序列化格式。

您的时间尺度是什么?我可以尝试对v2进行四舍五入(但我已经说了很长时间了)
DataContractSerializer
怎么样?@Marc:那太好了,但对我们来说可能不够快,我们需要及时了解如何正确编程。@Kent:据我所知,“DataContractSerializer”比“BinarySerializer”更慢,甚至更详细。我错了吗?不是说相切-但是将序列化对象注入ViewState是我今天听到的最可怕的事情Pete-这就是ASP.net在维护状态访问时所做的。这就是ViewState的作用。我们不是C#bit小提琴手;事实上,我不是任何类型的人,但我的同事肯定是。我不知道DTO层如何加速序列化。问题可能在于.Net BinarySerializer固有的措辞,以及它必须进行的所有时髦的反射等,才能正常工作。这不会因为DTO层而改变,是吗?@Joel-嗯,也许DTO的设计适合protobuf网络;pNice try;)但我认为DTO层所需的工作量与简单的自制序列化所需的工作量大致相同。。。毕竟,如果我要将数据发送到另一个类,那么也可以通过StreamWriter或其他方式发送。