我有一个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
类型。
答案 0 :(得分:0)
修订版中的否定值(-1)表示版本号未定义。
在下面的链接中查找(-1)。
https://msdn.microsoft.com/en-us/library/system.version.revision(v=vs.110).aspx
属性EmitDefaultValue=false
仅适用于默认值(是否序列化默认值)。
在你的情况下," -1"不是整数类型的默认值(修订数据类型)。它是零。
可以处理这种情况,使用OnSerializing()
属性并自定义数据库。
粗略地说,
的功能[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"
}
}