我遇到序列化问题。有问题的类表示网络数据包,并且有一个关联的字节数组用于有效负载,可能为空。
我使用GetData和SetData方法根据Microsoft Framework Design Guidelines建议公开了这一点,因为为了防止奇怪的串扰,读取和写入数组需要复制它而不是传递引用。指南建议在存在诸如对象创建之类的重要影响时获取/设置,这就是我所做的。
不幸的是,这导致内部成员未被序列化。该成员已标记为受保护。除了将其公开为公共属性之外,当Web服务将对象从服务器传递到客户端时,如何将其序列化?
答案 0 :(得分:3)
(编辑:假定网络使用;协议在原始问题中不明确)
你能使用WCF吗? DataContractSerializer
支持非公开成员:
[DataContract]
class Foo {
[DataMember] // can also be used on a field - not just properties
private int Bar {get;set;} // or internal or protected
}
如果没有,您只需将其视为DTO,并将该财产公之于众。
其他选项 - 二进制序列化? BinaryFormatter在平台之间不可移植(因此不适合所有Web服务),但protocol buffers之类的东西更友好。但是没有WDSL支持,也没有任何IPC堆栈(仅限原始数据)。