[英]How do I programmatically determine if a type is natively serializable by protobuf-net?
我通過反映類型動態創建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
聲明“此類型的數據具有內置行為,並且無法以這種方式添加到模型中” )?
r583通過擴展當前的CanSerializeContractType
來增加對此的支持; 現在有一個CanSerializeBasicType
和一個過度的CanSerialize
。 和以前一樣,這保留了對處理可空類型,列表(非嵌套)和1維數組的現有支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.