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; }
}
}