Я использую драйвер 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";
}
}
}
}
И схема сбора:
Схема сбора
Заранее спасибо!