Używam Protobuf-net do serializowania niestandardowej listy zagnieżdżonej. Rozumiem, że nie można bezpośrednio zagnieżdżać list rodzimych, dlatego użyłem obiektu kontenera dla wewnętrznej listy. Jednak chciałbym również, aby mój pojemnik obiektów IEnumerable ale to oznacza Protobuf-net wyrzuca go z błędu:Protobuf-net: Zagnieżdżone obiekty IEnumerable
Nested or jagged lists and arrays are not supported
Oto przykład z mojej listy struktury, która powoduje błąd:
[ProtoContract]
public class MyOuterList<T>
{
[ProtoMember(1)]
readonly List<MyInnerList<T>> nestedData = new List<ObjectList<T>>();
}
[ProtoContract]
public class MyInnerList<T> : IEnumerable<T>
{
[ProtoMember(1)]
private readonly List<T> data = new List<T>();
}
Poprawka polega na usunięciu IEnumerable z MyInnerList
, ale oczywiście uniemożliwia to bezpośrednią iterację. Czy można użyć podstępnego atrybutu, takiego jak [ProtobufCustomObjectSoPleaseIgnoreIEnumerable]
?
Najlepszą alternatywą, jaką do tej pory wymyśliłem, jest użycie właściwości, którą można wyliczyć, jak pokazano poniżej, ale obawiam się, że nieruchomość wciąż może być ponownie wyświetlona na liście. Wolałbym używać w pewien sposób GetEnumerator/yield
, ale nie widzę jak.
[ProtoContract]
public class MyInnerList<T>
{
[ProtoMember(1)]
private readonly List<T> data = new List<T>();
public IEnumerable<T> Data
{
get { return this.data; }
}
}
Idealne, wielkie dzięki. Nie wiedziałem dokładnie, gdzie powinienem patrzeć. –
Nadal występują problemy z uruchomieniem tego. Problem opublikowano tutaj: https://code.google.com/p/protobuf-net/issues/detail?id=287&q=IgnoreListHandling –
@shakinfree k; przyjrzy się –