2016-07-21 61 views
2

是否有一種方法可以爲所有繼承自特定基類型的類型設置自定義序列化器?爲所有繼承自基類型的類設置自定義的MongoDB BsonSerializer

考慮以下幾種類型:

class Identity<T> { 
    T Value { get; set; } 
} 
class StringIdentity : Identity<string> { 
} 
class PersonIdentity : StringIdentity { 
} 

以下模型:

class Person { 
    public PersonId Identity { get; set; } 
} 

與以下串行:

class StringIdentitySerializer : IBsonSerializer<StringIdentity> 
{ 
    object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) 
    { 
     return Deserialize(context, args); 
    } 

    public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, StringIdentity value) 
    { 
     context.Writer.WriteString(value.Value); 
    } 

    public StringIdentity Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) 
    { 
     return new StringIdentity(context.Reader.ReadString()); 
    } 

    public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) 
    { 
     Serialize(context, args, value as StringIdentity); 
    } 

    public Type ValueType => typeof(StringIdentity); 
} 

我想通BsonSerializer.RegisterSerializer(typeof(StringIdentity), new StringIdentitySerializer());將序列我的財產IdPerson作爲一個串。

當我將Id屬性更改爲StringIdentity類型時,此串化器工作。

我明白爲什麼發生這種情況(PersonIdentity是不一樣的類型StringIdentity),但(沒有裝修Person類),我將如何得到我的PersonPersonIdentity類型的屬性Id使用該序列化序列化?

+0

[jira.mongodb.org](https://jira.mongodb.org/secure/Dashboard.jspa) - 請問那裏 – profesor79

+1

不,我們不希望在Jira這樣的問題。不過,我會在這裏回答。 –

回答

2

所以,要做到這一點的方法是註冊一個serialization provider。這可以讓你攔截所有嘗試解決身份並做任何你想做的事情。