我正在使用 Protobuf-net 序列化自定义嵌套列表。我知道本机列表不能直接嵌套,这就是为什么我使用容器对象作为内部列表的原因。但是,我也想让我的容器对象 IEnumerable 但这意味着 Protobuf-net 将其抛出错误:
不支持嵌套或锯齿状列表和数组
这是导致错误的列表结构的示例:
[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>();
}
解决方法是从 IEnumerable 中删除,MyInnerList
但显然这会阻止它直接可迭代。[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; }
}
}