2013-05-06 87 views
0

source中授权状态的实现表明授权状态应该是可序列化的,但是当我尝试序列化授权状态以存储在我的身份验证票证中时,一个错误说实现需要一个无参数的构造函数。AuthorizationState无法序列化,因为它没有无参数的构造函数

从引用源剪断:

[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

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

var a = JsonConvert.SerializeObject(Authorization); 
var b = JsonConvert.DeserializeObject(a, typeof(AuthorizationState)); 
相关问题