簡體   English   中英

如何通過protobuf-net以編程方式確定類型是否可以本機序列化?

[英]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添加到模型中。 顯然, intstringTimeSpan類型不需要添加到模型中,但Bar可以。 我如何以編程方式進行這種區分? 我是否需要對此邏輯進行硬編碼(使用switch塊或if - else鏈)? 如果是這樣,protobuf-net r480本身支持哪些類型(即將它們添加到模型中將拋出ArgumentException聲明“此類型的數據具有內置行為,並且無法以這種方式添加到模型中” )?

r583通過擴展當前的CanSerializeContractType來增加對此的支持; 現在有一個CanSerializeBasicType和一個過度的CanSerialize 和以前一樣,這保留了對處理可空類型,列表(非嵌套)和1維數組的現有支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM