Why does a Web Service DataMember's Specified Attribute need to be set for int and Data but not for String
.net-2.0, wcf, web-services
Solution
The default parameters for the DataMember attribute are:
bool EmitDefaultValue (default true)
bool IsRequired (default false)
If the property you are exposing is a non-nullable value type you should use:
[DataMember(IsRequired = true)]
public int InvoiceNo;
Problem
I have created a web service via WCF. Then I exposed it as a web service to make it usable with a .NET 2.0 application. I created some DataContract with DataMember that could be used for by the exposed OperationContract. I notice that when I try to create DataClass to be passed in the web service that each DataContract attribute now has a partner "Specified" attribute for each member. For example: ``` [DataContract] public class Sales { [DataMember] public int InvoiceNo; ... } ``` When I create an instance of Sales in the web service client. I get attribute named InvoiceNo and InvoiceNoSpecified. Now here is my question, when the attribute is of type string, I do not need to set the corresponding "Specified" attribute to true, but when the attribute type is a int or DateTime, if I do not set the corresponding "Specified" attribute to true, the value becomes null in the web service host. Is there a way to avoid setting the Specified attribute? Cause I need to call the web service functions in a lot of places in my code. It would really be difficult to keep track of them all.