我正在使用Protobuf-net來序列化自定義嵌套列表。我知道原生列表不能直接嵌套,這就是爲什麼我使用容器對象作爲內部列表的原因。不過,我也想提出我的容器對象的IEnumerable但這意味着protobuf網把它扔了出去,出現錯誤:Protobuf-net:嵌套IEnumerable對象
Nested or jagged lists and arrays are not supported
這裏是我的表結構的一個例子這將導致錯誤:
[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>();
}
修復方法是從MyInnerList
中刪除IEnumerable,但很明顯這會阻止它直接迭代。有沒有像[ProtobufCustomObjectSoPleaseIgnoreIEnumerable]
這樣可以使用的偷偷摸摸的屬性?
到目前爲止我想出的最佳選擇是使用Enumerable屬性,如下所示,但是我擔心該屬性仍然可以重新轉換回列表。我寧願以某種方式使用GetEnumerator/yield
,但我看不出如何。
[ProtoContract]
public class MyInnerList<T>
{
[ProtoMember(1)]
private readonly List<T> data = new List<T>();
public IEnumerable<T> Data
{
get { return this.data; }
}
}
非常完美,非常感謝。我不知道應該在哪裏尋找。 – 2013-05-09 10:22:36
讓這個工作仍然有問題。此處發佈的問題:https://code.google.com/p/protobuf-net/issues/detail?id=287&q=IgnoreListHandling – 2013-05-09 16:14:23
@shakinfree k;將看看 – 2013-05-09 17:20:51