Сериализация данных только для чтения - PullRequest
1 голос
/ 07 декабря 2010

Это не дубликат этого вопроса .Я должен сериализовать свойство, которое «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();

* Метод 1010 * возвращает MembershipUserCollection, но у него нет средства доступа по умолчанию.Так что при сериализации я получаю исключение.Вот почему я пошел с List<MembershipUser>.Здесь также я сталкиваюсь с проблемой.Это съедает мой день, что может решить эту проблему?

1014 * Редактировать: Я использую XmlSerializer.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Сериализация будет сериализовать только открытые поля, а также общедоступные свойства, которые вы можете получить и установить.Причина последнего заключается в том, что если вы не можете установить его, то когда вы собираетесь десериализовать его, как вы устанавливаете свойство?

Поскольку класс не запечатан, вы можете наследовать от него, определитьсеттер, но он ничего не делает, то есть

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

Обратите внимание, что при десериализации в этот класс данные будут потеряны.

HTH, Брайан

0 голосов
/ 07 декабря 2010

Я бы предложил создать оболочку над MembershipUserCollection для вашей сериализации / десериализации.

Кроме того, Вы уверены, что приведенный выше код вызывает исключение, поскольку у полей есть закрытые члены? Это может быть из-за отсутствия Serializable атрибута или конструктора по умолчанию !!!

...