WebService - xsd:日期字段

时间:2012-09-07 10:02:10

标签: asp.net web-services soap xsd

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

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”字段,而不是他要求的每个字段。

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

2 个答案:

答案 0 :(得分: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进行测试,例如模拟对您服务的调用。

答案 1 :(得分:0)

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
}

这似乎正是我正在寻找的!