使用空或无效的日期元素反序列化SOAP响应

时间:2012-02-03 11:10:26

标签: .net wcf soap deserialization

我正在使用SAP-NetWeaver网络服务。响应对象包含一个数据,当它没有设置时,它返回“0000-00-00”。这导致我的.NET 4.0 WCF代理中出现反序列化错误,因为.NET的最小有效日期为“0001-01-01”。

我让SAP开发人员使用minoccurs =“0”属性来装饰日期元素,如果没有值存在则省略它,但他说他不能这样做。

在我要求他为空日期返回“0001-01-01”之前 - 只为我的WCF代理 - 我想知道:

  1. 根据SOAP,“0000-00-00”是一个有效的日期吗?无法在任何SOAP规范中找到它,请告诉我您的信息来源。

  2. 有没有办法告诉.NET反序列化程序接受“0000-00-00”并像DateTime.MinValue一样处理它?<​​/ p>

  3. 非常感谢!

    更新: 现在,如果日期为null,SAP-web-service将返回一个空元素。但我的问题仍然存在。

2 个答案:

答案 0 :(得分:1)

这是一个很好的谈话

here

可以简单地实现类的自定义序列化。以便将“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:

http://msdn.microsoft.com/en-us/library/7w06t139.aspx