Исключение с использованием суррогата в protobuf-net

59
7

У меня есть класс DataCollection, который имеет вложенный в него список. Я пытаюсь использовать класс Surrogate для него, где я подгоняю List> в List и суррогат класса Dto.

Я создаю RuntimeTypeModel

_model = TypeModel.Create();
_model.Add(typeof(DataCollection), false).SetSurrogate(typeof(DataCollectionSurrogate));
_model.Compile();'

Если я скомпилирую модель, я получаю следующее исключение.

System.ArgumentExceptionRepeated data (a list, collection, etc) has inbuilt behaviour and cannot use a surrogate

Что именно это передает здесь? Что есть некоторые методы в самом классе? В других случаях это не имеет значения. Я не понимаю сообщения, которое оно должно было передать.

Есть предположения?

спросил(а) 2015-11-24T20:52:00+03:00 5 лет назад
1
Решение
60

В принципе, коллекции предметов очень отличаются от предметов, во многих внутренних элементах. Библиотека позволяет использовать суррогаты для предметов, но не позволяет использовать суррогаты для всего, что она рассматривает как список/коллекцию... которая для целей protobuf-net означает:

    удовлетворяет требованиям foreach (обычно, но не обязательно, путем реализации IEnumerable[<T>] имеет подходящий метод добавления Add(T) для добавления элементов некоторые T могут быть идентифицированы (или явно указаны), которые удовлетворяют приведенному выше явно не обозначается как SkipListHandling

Если ваш тип не должен вести себя как список, тогда установите SkipListHandling в [ProtoContract]... но: не ожидайте, что он будет вести себя как список, если вы это сделаете. Он будет рассматриваться только как элемент.

ответил(а) 2015-11-30T19:24:00+03:00 4 года, 12 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема