2016-07-21 18 views
2

Gibt es eine Möglichkeit, einen benutzerdefinierten Serializer für alle Typen festzulegen, die von einem bestimmten Basistyp erben?Festlegen von benutzerdefiniertem MongoDB BsonSerializer für alle Klassen, die vom Basistyp erben

folgende Typen Gegeben:

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

Mit folgendem Modell:

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

Und die folgenden Serializer:

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); 
} 

ich dachte, dass BsonSerializer.RegisterSerializer(typeof(StringIdentity), new StringIdentitySerializer()); mein Eigentum Serialisierung würde Id auf Person als ein Zeichenfolge.

Dieser Serializer funktioniert, wenn ich die Id Eigenschaft ändern, um vom Typ StringIdentity zu sein.

Ich verstehe, warum dies geschieht (PersonIdentity ist nicht die gleiche Art wie StringIdentity), aber (ohne die Person Klasse Dekoration), wie würde ich die Eigenschaft Id vom Typ PersonIdentity auf meiner Person Klasse mit diesem Serializer zu serialisiert?

+0

[jira.mongodb.org] (https://jira.mongodb.org/secure/Dashboard.jspa) - bitte fragen Sie dort – profesor79

+1

Nein, wir wollen keine Fragen wie diese in Jira. Ich werde hier antworten. –

Antwort

2

So ist die Möglichkeit, ein serialization provider zu registrieren. Auf diese Weise können Sie alle Versuche abfangen, eine Identität aufzulösen und alles zu tun, was Sie damit tun möchten.