1

这不是这个问题的重复。我必须序列化“只读”的属性。我不能对这个类做任何事情,因为这是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。

4

2 回答 2

2

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

由于该类不是密封的,您可以从它继承,定义一个设置器,但让它什么都不做,即

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

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

HTH,布赖恩

于 2010-12-07T17:02:21.493 回答
0

我建议为您的序列化/反序列化目的在 MembershipUserCollection 上创建一个包装器。

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

于 2010-12-07T17:03:36.987 回答