Невозможно сериализовать это расширение List <T> - PullRequest
0 голосов
/ 04 мая 2010

Я пытаюсь протолкнуть подмножество набора данных через WCF для использования WCF - подумайте, постраничные данные. Поэтому я хочу, чтобы эта коллекция содержала данные на одну страницу, а также общее количество результатов. Я подумал, что это должно быть тривиально, создав пользовательский объект, который расширяет список. Тем не менее, все, что я делаю, приводит к тому, что мое свойство TotalNumber становится равным 0. Все данные сериализуются / десериализуются очень хорошо, но это единственное целое число вообще не встретится.

Вот моя первая неудачная попытка:

[Serializable]
public class PartialList<T> : List<T>
{
    public PartialList()
    {

    }

    public PartialList(IEnumerable<T> collection)
        : base(collection)
    {
    }

    [DataMember]
    public int UnpartialTotalCount { get; set; }

И вот моя вторая попытка, которая потерпела неудачу точно таким же образом:

[Serializable]
public class PartialList<T> : List<T>, ISerializable
{
    public PartialList()
    {

    }

    public PartialList(IEnumerable<T> collection)
        : base(collection)
    {
    }

    [DataMember]
    public int UnpartialTotalCount { get; set; }

    protected PartialList(SerializationInfo info, StreamingContext context)
    {
        UnpartialTotalCount = info.GetInt32("UnpartialTotalCount");
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("UnpartialTotalCount", UnpartialTotalCount);
    }

}

Что здесь за дело ??

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Если кто-то еще найдет эту тему, <DataContract> недопустим для пользовательских типов коллекций.

Вы должны использовать <CollectionDataContract> вместо. Это похожее пространство имен с эквивалентными членами, но оно может работать с пользовательскими списками и словарями. Для получения дополнительной информации см. «Настройка коллекций» в этой статье: http://msdn.microsoft.com/en-us/library/aa347850.aspx

0 голосов
/ 07 мая 2010

Согласно этот вопрос , это "По замыслу". : - (

0 голосов
/ 04 мая 2010

Для WCF вы, вероятно, захотите использовать атрибут [DataContract] в классе, а не интерфейс ISerializable.WCF использует другой тип сериализации и другое соглашение для маркировки классов и членов, которые должны быть сериализованы.

WCF может поддерживать [Serializable] или ISerializable, но я бы рекомендовал использовать только [DataContract] / [DataMember]/так далее.конвенция для WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...