数据协定中的 WCF 对象



[编辑]:我添加了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 枚举粘贴到我的原始问题中,什么是身份验证响应类的一部分,这就是问题所在......我忘记了设置 [枚举成员] 属性...

添加后,一切正常。

很抱歉这个愚蠢且真正初学者的问题...

感谢您的所有帮助!!

最新更新