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

发布于 2025-01-01 22:19:34 字数 504 浏览 1 评论 0原文

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

我要求 SAP 开发人员用 minoccurrs="0" 属性装饰日期元素,如果没有值则忽略它,但他说他不能这样做。

在我要求他为空日期返回“0001-01-01”之前(仅针对我的 WCF 代理),我想知道:

  1. “0000-00-00”是 SOAP 中的有效日期吗?在任何 SOAP 规范中都找不到它,因此请告诉我您的信息来源。

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

非常感谢!

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

I am consuming a SAP-NetWeaver web-service. The response object contains a data and when it is not set it returns "0000-00-00". This leads to a deserialization error in my .NET 4.0 WCF proxy because the minimum valid date for .NET would be "0001-01-01".

I asked the SAP-developer to decorate the date element with the minoccurs="0" attribute and omit it if there's no value present but he states he can't do so.

Before I ask him to return "0001-01-01" for empty dates - just for my WCF proxy - I would like to know:

  1. Is "0000-00-00" a valid date in terms of SOAP? Couldn't find it in any SOAP specification so please let me know your source of information.

  2. Is there a way to tell the .NET deserializer to accept "0000-00-00" and handle it like DateTime.MinValue?

Many thanks!

UPDATE:
Now the SAP-web-service returns an empty element if the date is null. But my problem remains the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

姜生凉生 2025-01-08 22:19:34

关于这个有一个很好的谈话

可以简单地实现类的自定义反序列化。这样“0000-00-00”的值将被捕获并转换为 DateTime.MinValue。
UPD:这是我一直在谈论的代码。

[OnDeserializing]
void OnDeserializing(StreamingContext c)
{
  if (MyCustonObj == null)
  {
    MyCustonObj = new MyCustomClass();
    MyCustonObj.MyStrData = "Overridden in  deserializing";
  }
}

there's a nice talk on this

here

it is possible to simply implement custom de serialisation of the class. so that the values of "0000-00-00" would be catched and converted into DateTime.MinValue.
UPD: this is the code I've been talking about.

[OnDeserializing]
void OnDeserializing(StreamingContext c)
{
  if (MyCustonObj == null)
  {
    MyCustonObj = new MyCustomClass();
    MyCustonObj.MyStrData = "Overridden in  deserializing";
  }
}
一页 2025-01-08 22:19:34

您可以实现 SOAP 扩展来在反序列化之前更改 SOAP:

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

You can implement a SOAP Extension to alter the SOAP before it's deserialized:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文