2010-12-07 30 views
1

這不是question的副本。我必須序列化「ReadOnly」屬性。我無法對這堂課做任何事,因爲這是System.Web.Security.MembershipUser班,當然這不是封閉班。序列化只讀成員數據

[WebGet] 
public string GetAllUsers() 
{ 
    List<MembershipUser> membershipList = new List<MembershipUser>(); 

    MembershipUserCollection userCollection = Membership.GetAllUsers(); 

    foreach (MembershipUser user in userCollection) 
     membershipList.Add(user); 

    string memberCollection = SerializeToString(membershipList, typeof(List<MembershipUser>)); 

    List<MembershipUser> users = Deserialize(memberCollection, typeof(List<MembershipUser>)) as List<MembershipUser>; 

    return memberCollection; 
} 

上面的代碼是我用什麼,

MembershipUserCollection userCollection = Membership.GetAllUsers(); 

GetAllUsers方法返回MembershipUserCollection,但這並不具有默認訪問。所以,當序列化我得到例外。這就是我與List<MembershipUser>一起去的原因。我也在這裏面臨麻煩。這是吃我的一天,有什麼可以解決這個問題?

編輯: 我正在使用XmlSerializer。

回答

2

序列化只會序列化公共字段以及您可以獲取和設置的公共屬性。後者的原因是,如果你不能設置它,那麼當你去反序列化它時,你如何設置屬性?

因爲類不是密封的,你可以從它繼承,定義一個二傳手,但有它什麼都不做,即

public string Name 
{ 
    get {return _name;} 
    set { } 
} 

事情看出來的是,當你反序列化的那類,數據將會丟失。

HTH, 布賴恩

+0

取決於序列化程序 - 只要您在其上放置[DataMember]屬性,WCF DataContractSerializer就會愉快地序列化私有成員..... – 2010-12-07 17:03:23

0

我建議創建您的序列化/反序列化用途的包裝在MembershipUserCollection。

另外,你確定上面的代碼拋出異常,因爲字段有私人成員?這可能是因爲缺少Serializable屬性或默認構造函數!

相關問題