我有一个看起来像这样的类层次结构。这些类包含许多我已排除的其他细节。这是对这些类的序列化方面的简化。
[ProtoInclude(1, typeof(Query<bool>))]
[ProtoInclude(2, typeof(Query<string>))]
[ProtoInclude(3, typeof(Query<int>))]
[ProtoInclude(4, typeof(Query<decimal>))]
[ProtoInclude(5, typeof(Query<DataSet>))]
abstract class Query
{
public string Result { get; set; }
}
[ProtoInclude(1, typeof(SpecialQuery)]
abstract class Query<T> : Query
{
public new T Result { get; set; }
}
abstract class SpecialQuery : Query<DataSet>
{
public new string Result { get; set; }
}
我还有大约 150 个自动生成的泛型查询后代,具有多种泛型类型。例如:
[ProtoContract]
class W : Query<bool>
{
}
[ProtoContract]
class X : Query<string>
{
}
[ProtoContract]
class Y : Query<int>
{
}
[ProtoContract]
class Z : SpecialQuery
{
}
我还为所有这些类型自动生成了 [ProtoInclude]。例如:
[ProtoInclude(1, typeof(W)]
[ProtoInclude(2, typeof(X)]
[ProtoInclude(3, typeof(Y)]
[ProtoInclude(4, typeof(Z)]
问题是,我如何部署这 150 个 ProtoInclude?我尝试了各种看起来合乎逻辑的组合,但我得到了各种异常,具体取决于哪些属性出现在哪里。上例中实际需要序列化的类型是 W、X、Y、Z,只有大约 150 个。
protobuf-net 甚至可以处理这样的事情,还是我应该尝试其他类型的序列化?