我有一个调用WCF服务的WPF应用程序。在WCF服务中,我调用数据库并返回一些包含日期时间的项目。
以下是我如何返回数据。
List<MessageData> messages = new List<MessageData>();
//sql stuff
while (reader.Read())
{
MessageData message = new MessageData();
message.ID = (Guid)reader["message_id"];
message.Description = reader["subject"].ToString();
messageData.IssuedDate = reader["issued_date"].ToString();
message.Severity = reader["severity"].ToString();
message.Specialty =reader["specialty"].ToString();
messages.Add(message);
}
MessageData中的我已将IssuedDate指定为DateTime和字符串。 单步执行调试器,我看到实际的DateTime被放置在IssuedDate中。 当它返回到WPF应用程序时,IssuedDate为null并且值丢失。
WPF方
List<CWeb.MessageData> data = new CWeb.SCClient().GetMessages(messageData, Global.Token).ToList();
任何提示?我猜它在序列化/反序列化中丢失了?
更新 当我将字符串中的随机单词分配给IssuedDate时,例如:'为什么你不工作' 它返回时,该字符串不会拒绝以日期时间格式返回任何内容。
答案 0 :(得分:1)
这可能是你的合同不匹配吗?也许客户希望DateTime
服务提供String
?
WCF能够在数据合同中返回DateTime
。因此MessageData.IssuedDate
应为DateTime
,您可以使用类似的内容从数据读取器中获取它:
message.IssuedDate = reader["issued_date"] as DateTime? : DateTime.MinValue;
我注意到的另一件事:IssuedDate
属性是您未在message
对象中设置的唯一属性,而是messageData
对象。你确定你使用的是正确的物体吗?
此外,在将DateTime
作为字符串返回时,您应该将其转换为可以可靠转换回的国际格式,例如ToString("yyyyMMdd HH:mm:ss")
。