【问题标题】:WebService - xsd:Date fieldWebService - xsd:日期字段
【发布时间】:2012-09-07 10:02:09
【问题描述】:

我正在为 ASP.Net v3.5 中的客户创建 Web 服务。 目前,我们有一个类似于以下内容的对象,该对象由其中一种 Web 服务方法返回:

public class blah
{
 public DateTime datetime;
 public int someData;
}

现在,客户向我发送了以下请求:

在您的架构中,您有一个 xsd:dateTime 条目。你可以吗 将其分成两个字段,一个用于日期,另一个用于时间。这 使用 xsd:date 和 xsd:time 作为对象类型应该没问题。

显然,我可以按如下方式更改类:

public class blah
{
 public DateTime date;
 public DateTime time;
 public int someData;
}

但我认为这实际上会产生两个“xsd:DateTime”字段,而不是他要求的每个字段。

您能告诉我如何实现客户期望的结果吗?

【问题讨论】:

    标签: asp.net web-services soap xsd


    【解决方案1】:

    .NET 中没有Time 对象,这是DateTime 对象的一部分。

    我会继续使用两个 strings 对象

    public class blah
    {
        public string date;
        public string time;
        public int someData;
    }
    

    然后很快将它们解析为 DateTime 对象

    DateTime dateOut;
    if(DateTime.TryParseExact(
              string.Format("{0} {1}", date, time), 
              "yyyy-MM-dd HH:mm", 
              null, 
              System.Globalization.DateTimeStyles.None, 
              out dateOut)) 
    {
       // date is valid
    }
    else
    {
        // send error back saying that DATE or/and Time needs to follow a pattern
    }
    

    要使属性呈现特定类型,您可以使用以下方法进行装饰:

    public class blah
    {
        [XmlElement(DataType = "Date")]
        public string date;
        [XmlElement(DataType = "Time")]
        public string time;
        public int someData;
    }
    

    但有些论坛认为 .NET 在这方面存在一些问题...试一试并使用 Fiddler 自行测试它,例如模拟对您的服务的调用。

    【讨论】:

    • 但是如何在 WDSL/SOAP 中提供客户端需要的“xsd:Date”和“xsd:Time”对象类型?
    • .NET 不输出这种类型。 PHP 或 Java 都可以。即使你超越,你也会遇到麻烦。为此编辑了答案。
    • 我知道 .Net 没有“时间”类型,但必须有一种方法告诉客户您期望为“XSD:时间”类型?显然,在内部我们可以将它作为一个字符串......
    【解决方案2】:
    public class Blah
    {
     [System.Xml.Serialization.XmlElement(Namespace="http://www.w3.org/2001/XMLSchema", DataType="time")]
     public DateTime time;
    
     [System.Xml.Serialization.XmlElement(Namespace="http://www.w3.org/2001/XMLSchema", DataType="time")]
     public DateTime date;
    
     public int someData
    }
    

    这似乎正是我要找的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多