我在客户端和服务器上都有以下枚举:
enum AddressType
{
fax,
...
email,
voice
}
当调用我的方法时,我返回一个将AddressType作为属性的对象,并将其显式设置为AddressType.voice
但是,在客户端上,收到的对象改为AddressType.fax
...
奇怪的是,其他一切看起来都很正常,其他枚举类型正常回归。
我检查过,客户端和服务器都具有完全相同的枚举定义,具有相同的顺序和xml命名空间。两者之间没有任何内容可以改变这个值。
我无法更改Web服务界面,因为Web服务本身是另一个的模型,而客户端是运行大量内容的遗留应用程序。
关于这里可能发生什么的任何想法?
感谢。
答案 0 :(得分:0)
您使用的是哪种Web服务框架(WCF,ASPX等)?根据使用的序列化程序,您可能必须将属性明确标记为可序列化。
例如,使用默认的DataContractSerializer
,您需要在要序列化的每个属性或字段上放置DataMember
属性。听起来这个字段没有被序列化,因为它默认为零值。您可以通过更改分配给枚举的每个成员的值来测试这一点,方法是重新排列它们并让自动分配的值不同,或者在定义中明确指定每个枚举成员的值。如果值总是以零表示的值返回,那么(假设其他所有内容都与属性setter一样)该属性没有被序列化。