我在WCF服务类中有一个具有初始值的属性,如下所示
private int mFieldLength_Name = 50;
[DataMember]
public int FieldLength_Name
{
get { return mFieldLength_Name; }
private set { mFieldLength_Name = value; }
}
然而,当我在客户端打电话时,它总是返回'0'而不是'50'。
如何解决此问题?
我试过[DataMember(EmitDefaultValue = false)] 但没有工作...... :(
谢谢,
日剧
答案 0 :(得分:4)
我遇到了同样的问题;在做了很多尝试后,我最终发现问题在于DataType
。
我根据数据库有一个数据类型Int32
,并且使用的属性类型为String
,它不会产生任何编译或执行问题,因为int
可以默认序列化string
。
但我每次都看到空值,我将属性类型更改为Int32
,它就像一个魅力。试一试,确认您的数据类型,因为它们在编译器上显示正确的数据,直到第一次服务调用,但是一旦您跨越服务,您将看到空数据。
因此,如果我在一行中告诉解决方案,那么数据类型是不一样的;它可能会返回空值。
答案 1 :(得分:1)
您是否在服务器上使用与客户端相同的DataContracts程序集?如果您正在生成自己的合同以便在客户端中使用,那么它将不知道这种初始化,因为这是一种无法通过线路转换的行为。
当您为某个类型选择“非自然”默认值(即整数为50而不是0)时,您必须将DefaultValueAttribute应用于数据成员,以便DataContractSerializer认识到该值是默认值而不是发出它。