我通过反映类型来动态创建 RuntimeTypeModel。当我反思一个类型时,我会查看它的每个属性并确定标签(使用我自己的机制)并将其添加到MetaType
. 我还需要确定属性的类型本身是否是嵌套消息,而不是 protobuf-net 本身可序列化的原语,以便我也可以递归处理该类型,从而将其添加到模型中并制作protobuf-net 可序列化的外部类型。
例如,假设我正在反思以下类型:
public class Foo
{
public int Number { get; set; }
public string Text { get; set; }
public Bar InnerMessage { get; set; }
}
public class Bar
{
TimeSpan Duration { get; set; }
}
我被要求序列化Foo
,并且对于每种属性的每种类型,我需要确定是否需要将其作为新的添加到模型中MetaType
。显然,int
和string
类型TimeSpan
不需要添加到模型中,但Bar
确实需要。我将如何以编程方式做出这种区分?我是否需要对这个逻辑进行硬编码(使用switch
块或链)if
?else
如果是这样,protobuf-net r480 原生支持哪些类型(即,将它们添加到模型中会抛出“这种类型的数据具有内置行为,并且不能以这种方式添加到模型中”的ArgumentException
声明)?