序列化未作为属性公开的状态

时间:2009-01-31 14:09:22

标签: .net web-services serialization

我遇到序列化问题。有问题的类表示网络数据包,并且有一个关联的字节数组用于有效负载,可能为空。

我使用GetData和SetData方法根据Microsoft Framework Design Guidelines建议公开了这一点,因为为了防止奇怪的串扰,读取和写入数组需要复制它而不是传递引用。指南建议在存在诸如对象创建之类的重要影响时获取/设置,这就是我所做的。

不幸的是,这导致内部成员未被序列化。该成员已标记为受保护。除了将其公开为公共属性之外,当Web服务将对象从服务器传递到客户端时,如何将其序列化?

1 个答案:

答案 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堆栈(仅限原始数据)。