потеря данных mongodb при запуске веб-службы в С#

94
13

У меня есть класс entitiy как

public class City
{
[BsonId]
public string id { get; set; }
public int value { get; set; }
}

Я создал веб-сервис, и есть веб-метод как

[WebMethod]
public List<City> linQuery()
{
MongoConn dao = new MongoConn();
MongoServer mongo = dao.getConnection();
List<City> list = new List<City>();

string dbName = dao.dbName();
var db = mongo.GetDatabase(dbName);

Console.WriteLine(db);
using (mongo.RequestStart(db))
{
var collection = db.GetCollection<City>("cityMap");
IQueryable<City> cities = collection.AsQueryable().Where(c => c.value > 1200);
foreach (City city in cities)
list.Add(city);
return list;
}
}

когда я запускаю службу, я получаю эту ошибку:

System.IO.FileFormatException: An error occurred while deserializing the value property of class WebService1.City: Truncation resulted in data loss. ---> MongoDB.Bson.TruncationException: Truncation resulted in data loss.

Как я могу решить эту проблему? Спасибо за помощь.

спросил(а) 2015-05-11T09:34:00+03:00 5 лет назад
1
Решение
68

вы пытались установить AllowTruncation=true для своих свойств в классе City?

public class City
{
[BsonId]
[BsonRepresentation(BsonType.Int, AllowTruncation=true)]
public string id { get; set; }
[BsonRepresentation(BsonType.Int, AllowTruncation=true)]
public int value { get; set; }
}

Как установить параметры сериализации для значений геоданных с помощью официального драйвера 10gen С#?

ответил(а) 2015-05-11T10:09:00+03:00 5 лет назад
37

Как правило, вы не хотите, чтобы ваша модель знала или не заботилась о том, как она хранится, поэтому MongoDB.Bson атрибутов MongoDB.Bson не идеально. Вы можете настроить, как MongoDB.Driver должен читать и хранить десятичные дроби с этой конфигурацией.

BsonSerializer.RegisterSerializer(
typeof(decimal),
new DecimalSerializer(BsonType.Double,
new RepresentationConverter(
true, //allow truncation
true // allow overflow, return decimal.MinValue or decimal.MaxValue instead
))
);

источник

ответил(а) 2019-05-02T19:38:00+03:00 1 год, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема