每个项目的版本类型序列化不同?

时间:2018-06-12 18:28:55

标签: c# wcf

我有一个Version字段,它是数据合同的一部分,如下所示:

[DataMember(EmitDefaultValue = false)]
public Version version { get; set; }

在REST请求中,最终将序列化为

"version": {
    "_Build": 0,
    "_Major": 1,
    "_Minor": 0,
    "_Revision": 0
}

我很好。但是,我启动一个新项目,添加项目作为参考,然后当我尝试从新项目发送REST请求时,它被序列化为

"version":{
    "Major":1,
    "Minor":0,
    "Build":0,
    "Revision":-1,
    "MajorRevision":-1,
    "MinorRevision":-1
}

当然,这给我带来了BAD_REQUEST。注意:我在这里担心不同的字段名称,而不是实际的数字。我在两者中都使用相同的Version类型。

1 个答案:

答案 0 :(得分:0)

修订版中的否定值(-1)表示版本号未定义。

在下面的链接中查找(-1)。

https://msdn.microsoft.com/en-us/library/system.version.revision(v=vs.110).aspx

属性EmitDefaultValue=false仅适用于默认值(是否序列化默认值)。

在你的情况下," -1"不是整数类型的默认值(修订数据类型)。它是零。

可以处理这种情况,使用OnSerializing()属性并自定义数据库。

粗略地说,

取消(https://msdn.microsoft.com/en-us/library/system.runtime.serialization.onserializingattribute(v=vs.110).aspx

的功能
[OnSerializing()]
internal void OnSerializingMethod(StreamingContext context)
{
   if (this.version.Revision == -1)
   {
      //handle it properly 

      or

      this.version.Revision = default(int)// will not be serialized as you are using "EmitDefaultValue=false"
   }
}