我在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)]但没有工作...... :(
谢谢,
日剧
2 回答
您是否在服务器上使用与客户端相同的DataContracts程序集?如果您正在生成自己的 Contract 以便在客户端中使用,则它将不知道此初始化,因为这是一种无法通过网络转换的行为 .
当您为类型选择“非自然”默认值(即50而不是整数的0)时,必须将DefaultValueAttribute应用于数据成员,以便DataContractSerializer认识到该值是默认值而不是发出它 .
我遇到了同样的问题;在做了很多尝试之后,我最终发现问题在于
DataType
.我有一个数据类型
Int32
根据数据库,并使用的属性类型String
,它不会给出任何编译或执行问题,因为int
默认可以序列化为string
.但我每次都看到空值,我将属性类型更改为
Int32
,它就像一个魅力 . 试一试,确认您的数据类型,因为它们在编译器上显示正确的数据,直到第一次服务调用,但是一旦您跨越服务,您将看到空数据 .因此,如果我在一行中告诉解决方案,那么数据类型是不一样的;它可能会返回空值 .