序列化只读成员数据

时间:2010-12-07 16:52:36

标签: c# .net serialization accessor

这不是此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 个答案:

答案 0 :(得分:2)

序列化只会序列化公共字段以及您可以获取和设置的公共属性。后者的原因是,如果你不能设置它,那么当你去反序列化它时,你如何设置属性?

由于这个类没有被密封,你可以继承它,定义一个setter,但它什么都不做,即

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

需要注意的是,当您反序列化到该类时,数据将会丢失。

HTH, 布赖恩

答案 1 :(得分:0)

我建议在MembershipUserCollection上创建一个包装器,用于序列化/反序列化。

另外,你确定上面的代码是抛出异常,因为字段有私有成员吗?可能是因为缺少Serializable属性或默认构造函数!