将EmitDefaultValue应用于属性。如何指定默认值?

时间:2011-06-06 16:44:50

标签: c# .net wcf web-services attributes

  

可能重复:
  WCF DataMember EmitDefaultValue on value type? (but set my own default value)

请考虑以下事项:

[DataContract]
public class MyType {
   [DataMember(EmitDefaultValue = true)]
   public string MyStr = "DefVal";
}

在上面的代码中,我可以指定分配后使用的默认值。

现在考虑以下事项:

[DataContract]
public class MyType {
   [DataMember(EmitDefaultValue = true)]
   public string MyStr {
      get { ... }
      set { ... }
   }
}

如何在此处指定默认值???

三江源

1 个答案:

答案 0 :(得分:0)

EmitDefaultValue表示如果不指定值,它仍应添加具有.NET类型默认值的元素。在string的情况下,它将类似于:

<MyStr xsi:nil="true" />

您的第一个示例未设置默认值。它设置了公共值,因为它是任何其他的赋值,如果您的传入消息包含null,它将覆盖该初始值。

如果您需要使用任何特殊值而不是null(在序列化之前或反序列化之后),请使用带有[OnSerializing][OnDeserialized]属性的方法,如链接副本中所述。