Wir haben einen benutzerdefinierten Serializer für einen Enum (messvaluetype), der die Enum als String in MongoDB speichert und es von einem String zurück in den Umfeld des Abfragers. Wenn nicht, funktioniert alles wie erwartet.
Code: Select all
public class TestA
{
public MeasurementValueType ValueType { get; set; }
}
public enum MeasurementValueType : ushort
{
Distance = 1,
Angle = 2
}
Code: Select all
public class MeasurementValueTypeSerializer : StructSerializerBase
{
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, MeasurementValueType value)
{
BsonSerializer.Serialize(context.Writer, value.ToString());
}
public override MeasurementValueType Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var measurementValueType = (MeasurementValueType)Enum.Parse(
args.NominalType,
BsonSerializer.Deserialize(context.Reader)
);
return measurementValueType;
}
}
< /code>
Registriert in Startup: < /p>
BsonSerializer.RegisterSerializer(typeof(MeasurementValueType), new MeasurementValueTypeSerializer());
Beim Speichern eines Dokuments sollte ValuEType als Zeichenfolge in MongoDB gespeichert werden. Beim Einsetzen eines Objekts wird der Serializer aufgerufen und der Enum als Zeichenfolge bestehen. Wenn der Deserializer als ganzes Dokument zurückfasst, wird der Deserializer aufgerufen.
Code: Select all
database.TestACollection.Insert(new TestA { ValueType = MeasurementValueType.Angle });
var match = database.TestACollection
.AsQueryable()
.Single(x => x.ValueType == MeasurementValueType.Angle);
Code: Select all
MeasurementValueType.Angle