[编辑]:我添加了TokenType枚举,是什么导致了整个问题...
我在使用 WCF 时遇到问题,不幸的是我没有找到任何有用的帮助。我正在创建一个基于 WCF 的应用程序。当服务器响应客户端的请求时,我希望发回以下类:
[DataContract]
public enum TokenType
{
User,
Device
}
[DataContract]
public class AuthenticationResponse
{
[DataMember]
public LogonStatus Status { get; set; }
[DataMember]
public AccessToken Token { get; set; }
}
[DataContract]
public struct AccessToken
{
[DataMember]
public string TokenID
{
get;
set;
}
[DataMember]
public TokenType Type
{
get;
set;
}
[DataMember]
public string Uid
{
get;
set;
}
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public DateTime ExpirationTime
{
get;
set;
}
[DataMember]
public DateTime GenerationTime
{
get;
set;
}
[DataMember]
public bool IsExpired
{
get
{
return DateTime.Now > this.ExpirationTime;
}
}
}
当我将身份验证响应发送回客户端时,它总是失败。我的疑问:是否有机会在DataContract对象中使用类/结构对象,或者我是否必须将AccessToken对象替换为AuthenticationResponse对象中的基本类型(例如字符串)?
谢谢你的帮助!此致敬意
加博尔
问题是您的public bool IsExpired
没有 setter,因此在序列化对象时会导致问题。
解决方法是使用空主体为您的财产设置受保护/私有设置器(或将其替换为方法)
[DataMember]
public bool IsExpired
{
get
{
return DateTime.Now > this.ExpirationTime;
}
set
{
/* Dummy setter for serialization fix */
}
}
您可以在此处找到有关序列化的更多信息:https://msdn.microsoft.com/en-us/library/182eeyhh.aspx
更具体地说:
可序列化的项
可以使用 XmLSerializer 类序列化以下项:
Public read/write properties and fields of public classes
啊...对不起。我真的很傻...我忘了将 TokenType 枚举粘贴到我的原始问题中,什么是身份验证响应类的一部分,这就是问题所在......我忘记了设置 [枚举成员] 属性...
添加后,一切正常。
很抱歉这个愚蠢且真正初学者的问题...
感谢您的所有帮助!!