这不是此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。
答案 0 :(得分:2)
序列化只会序列化公共字段以及您可以获取和设置的公共属性。后者的原因是,如果你不能设置它,那么当你去反序列化它时,你如何设置属性?
由于这个类没有被密封,你可以继承它,定义一个setter,但它什么都不做,即
public string Name
{
get {return _name;}
set { }
}
需要注意的是,当您反序列化到该类时,数据将会丢失。
HTH, 布赖恩
答案 1 :(得分:0)
我建议在MembershipUserCollection上创建一个包装器,用于序列化/反序列化。
另外,你确定上面的代码是抛出异常,因为字段有私有成员吗?可能是因为缺少Serializable属性或默认构造函数!