.net 如何为缺少的wcf DataContracts成员指定默认值?
假设我有以下数据契约在客户端和服务器的v1上运行.net 如何为缺少的wcf DataContracts成员指定默认值?,.net,wcf,datacontract,.net,Wcf,Datacontract,假设我有以下数据契约在客户端和服务器的v1上运行 [DataContract] public class Customer { [DataMember] public string Name; [DataMember] public string LastName; } 现在在本文中,我将服务器更新为DataContract V2的新版本-添加新成员年龄 [DataMember] publi
[DataContract]
public class Customer
{
[DataMember]
public string Name;
[DataMember]
public string LastName;
}
现在在本文中,我将服务器更新为DataContract V2的新版本-添加新成员年龄
[DataMember]
public int Age = 25;
如上所述,如果客户端未指定成员,则应该将其默认为25
- ClientV1(旧)调用ServerV2(新)-在这种情况下,客户端不传递新成员。但是,我发现数据成员的值为0(缺少的成员应获得默认值25)
我的问题是为什么字段初始值设定项方法不起作用?在反序列化过程中没有调用构造函数或字段初始值设定项。我还没有找到关于后者的文档,但是如果您将一个私有字段放在同一个类中,它不是
[DataMember]
,那么您会注意到,这个字段也不会被初始化
我最后使用的一种方法是定义一个方法来设置默认值,并在构造函数中以及从[OnDeserialization]
方法中调用此方法
例如(请原谅我使用VB.NET,这是我手头的东西)
Public Sub New()
SetDefaults()
端接头
'反序列化发生在反序列化之前
私有子序列化(ByVal c作为StreamingContext)
SetDefaults()
端接头
私有子集合默认值()
Foo=“FooValueV2”
Bar=“BarValueV2”
OnlyInV2=“OnlyInV2值”
仅限V2int=98765
端接头
[DataMember]
public int Age;
[OnDeserializing]
internal void OnDeserializingMethod(StreamingContext context)
{
Age = 25;
}
Public Sub New()
SetDefaults()
End Sub
' OnDeserializing happens before deserialization
<OnDeserializing>
Private Sub OnDeserializing(ByVal c As StreamingContext)
SetDefaults()
End Sub
Private Sub SetDefaults()
Foo = "FooValueV2"
Bar = "BarValueV2"
OnlyInV2 = "OnlyInV2Value"
OnlyInV2Int = 98765
End Sub