Mongo Linq -Abfrage ignoriert die benutzerdefinierte Serialisierung des LINQ -Arguments mit dem LINQ -Anbieter V3C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Mongo Linq -Abfrage ignoriert die benutzerdefinierte Serialisierung des LINQ -Arguments mit dem LINQ -Anbieter V3

Post by Anonymous »

Ausgabe
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
}
Benutzerdefinierter Serializer für MessvalUeType :

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());
Erwartete Verhalten
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);
Dies hat im Linq-Anbieter V2 gut funktioniert, aber im LINQ-Anbieter V3 stimmt es nicht mehr überein.

Code: Select all

MeasurementValueType.Angle
) an den Serializer übergeben, damit er vor der Ausführung der Abfrage in eine Zeichenfolge konvertiert werden kann? In LINQ -Abfragen?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post