AuthorizationState无法序列化,因为它没有无参数构造函数

时间:2013-05-06 17:44:55

标签: dotnetopenauth

source中授权状态的实现表明授权状态应该是可序列化的,但是当我尝试序列化授权状态以存储在我的身份验证票证中时,我收到一条错误消息,说明实现需要无参数构造函数。

从引用来源剪切:

[Serializable]
public class AuthorizationState : IAuthorizationState {
    ...
    public AuthorizationState(IEnumerable<string> scopes = null) {

我如何得到这个州:

var Authorization = Client.ProcessUserAuthorization();

我是如何尝试序列化州的:

    public string Serialize(IAuthorizationState objectInstance)
    {
        var serializer = new XmlSerializer(objectInstance.GetType());
        var sb = new StringBuilder();

        using (TextWriter writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, objectInstance);
        }

        return sb.ToString();
    }

我运行了一个快速控制台应用

class Program
{
    static void Main(string[] args)
    {
        var can = new CanSerialize();
        var cant = new CantSerialize();

        var ser1 = can.Serialize();
        var ser2 = cant.Serialize();
    }
}

[Serializable]
public class CantSerialize
{
    public int id { get; set; }
    public CantSerialize(int ID = 1)
    {
        id = ID;
    }

    public string Serialize()
    {
        var serializer = new XmlSerializer(this.GetType());
        var sb = new StringBuilder();

        using (TextWriter writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, this);
        }

        return sb.ToString();
    }

}

[Serializable]
public class CanSerialize
{
    public int id { get; set; }
    private CanSerialize()
    {
        id = 1;
    }
    public CanSerialize(int ID = 1)
    {
        id = ID;
    }

    public string Serialize()
    {
        var serializer = new XmlSerializer(this.GetType());
        var sb = new StringBuilder();

        using (TextWriter writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, this);
        }

        return sb.ToString();
    }
}

实现是否可以使用默认的无参数构造函数?如示例所示,如果担心有公共责任,则可以是私人的。

与此同时,我将创建一个数据传输对象,以便在我的授权令牌和州之间来回传递信息。

编辑: 我发现JSON.net转换效果很好:

var a = JsonConvert.SerializeObject(Authorization);
var b = JsonConvert.DeserializeObject(a, typeof(AuthorizationState));

1 个答案:

答案 0 :(得分:1)

我发现JSON.net转换效果很好:

var a = JsonConvert.SerializeObject(Authorization);
var b = JsonConvert.DeserializeObject(a, typeof(AuthorizationState));