Не удалось преобразовать в тип 'MongoDB.Bson.Serialization.IBsonSerializer`1 [System.String]' - PullRequest
0 голосов
/ 18 февраля 2019

Я использую драйвер mongoDB для C # и у меня возникают проблемы при попытке выполнить некоторые запросы из-за сериализации / десериализации.Насколько я понял, я не могу сериализовать поле Int32 в строку.

System.ArgumentException: объект типа 'US.EndPointTests.AdditionalFunctionalities.TestingObjectTypeSerializer' не может быть преобразованнабрать 'MongoDB.Bson.Serialization.IBsonSerializer`1 [System.String]'.

Это моя коллекция:

private class contactos
{
    public ObjectId _id { get; set; }
    public string nombre { get; set; }
    public string email { get; set; }

    [BsonSerializer(typeof(TestingObjectTypeSerializer))]
    public string telefono { get; set; }
    [BsonSerializer(typeof(TestingObjectTypeSerializer))]
    public string telefono2 { get; set; }

    public string direccion { get; set; }
    public string direccionNormalizada { get; set; }
    public string[] maestroTipoContacto { get; set; }
    public string maestroCanalEntrada { get; set; }

    [BsonSerializer(typeof(TestingObjectTypeSerializer))]
    public string nota { get; set; }
    public string cifnif { get; set; }

    [BsonElement("particion")]
    [BsonSerializer(typeof(TestingObjectTypeSerializer))]
    public string particion { get; set; }

    public DateTime fechaCreacion { get; set; }
    public DateTime fechaModificacion { get; set; }
    public string nombreNormalizado { get; set; }

    public string[] tipoMaestroContacto { get; set; }
}

Я пытаюсьудалить один документ из БД, используя:

            returnDictionary = GetContact();                

            string particion = (returnDictionary["particion"].ToString());

            var builder = Builders<contactos>.Filter;

            var filter = builder.Eq("particion", Int32.Parse(particion));

            var DeleteOne = collection.DeleteOne(filter);

Но я получаю эту ошибку:

System.ArgumentException: объект типа 'US.EndPointTests.AdditionalFunctionalities.TestingObjectTypeSerializer'не может быть преобразован в тип 'MongoDB.Bson.Serialization.IBsonSerializer`1 [System.String]'.

Это мой пользовательский сериализатор (здесь я пробовал несколько разных подходов, но ни один из них не работал):

public class TestingObjectTypeSerializer : IBsonSerializer
{
    public Type ValueType { get; } = typeof(string);

    public object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
    {
        var bsonType = context.Reader.CurrentBsonType;
        switch (bsonType)
        {
            case BsonType.Null:
                context.Reader.ReadNull();
                return null;
            case BsonType.String:
                return context.Reader.ReadString();
            case BsonType.Int32:
                return context.Reader.ReadInt32().ToString(CultureInfo.InvariantCulture);
            default:
                var message = string.Format("Cannot deserialize BsonString or BsonInt32 from BsonType {0}.", bsonType);
                throw new BsonSerializationException(message);
        }
    }

    public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
    {
        if (value != null)
        {
            context.Writer.WriteString(value.ToString());
        }
        else
        {
            context.Writer.WriteNull();
        }
    }

    private static object GetNumberValue(BsonDeserializationContext context)
    {
        var value = context.Reader.ReadInt32();

        switch (value)
        {
            case 1:
                return "one";
            case 2:
                return "two";
            case 3:
                return "three";
            default:
                return "BadType";
        }
    }
}

}

И схема сбора:

Схема сбора

Заранее спасибо!

...