我正在使用SAP-NetWeaver网络服务。响应对象包含一个数据,当它没有设置时,它返回“0000-00-00”。这导致我的.NET 4.0 WCF代理中出现反序列化错误,因为.NET的最小有效日期为“0001-01-01”。
我让SAP开发人员使用minoccurs =“0”属性来装饰日期元素,如果没有值存在则省略它,但他说他不能这样做。
在我要求他为空日期返回“0001-01-01”之前 - 只为我的WCF代理 - 我想知道:
根据SOAP,“0000-00-00”是一个有效的日期吗?无法在任何SOAP规范中找到它,请告诉我您的信息来源。
有没有办法告诉.NET反序列化程序接受“0000-00-00”并像DateTime.MinValue一样处理它?</ p>
非常感谢!
更新: 现在,如果日期为null,SAP-web-service将返回一个空元素。但我的问题仍然存在。
答案 0 :(得分:1)
这是一个很好的谈话
可以简单地实现类的自定义序列化。以便将“0000-00-00”的值捕获并转换为DateTime.MinValue。 UPD:这是我一直在谈论的代码。
[OnDeserializing]
void OnDeserializing(StreamingContext c)
{
if (MyCustonObj == null)
{
MyCustonObj = new MyCustomClass();
MyCustonObj.MyStrData = "Overridden in deserializing";
}
}
答案 1 :(得分:0)
您可以实现SOAP扩展以在反序列化之前更改SOAP: