4

我通过反映类型来动态创建 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。显然,intstring类型TimeSpan不需要添加到模型中,但Bar确实需要。我将如何以编程方式做出这种区分?我是否需要对这个逻辑进行硬编码(使用switch块或链)ifelse如果是这样,protobuf-net r480 原生支持哪些类型(即,将它们添加到模型中会抛出“这种类型的数据具有内置行为,并且不能以这种方式添加到模型中”的ArgumentException声明)?

4

1 回答 1

3

r583 通过扩展 current 来增加对此的支持CanSerializeContractType;现在有一个CanSerializeBasicType, 和一个包罗万象的CanSerialize. 和以前一样,这保留了对处理可空类型、列表(非嵌套)和一维数组的现有支持。

于 2012-08-21T09:00:08.547 回答