C # mongodb сериализация BigInteger - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующий объект:

public abstract class RichPerson{
    public string name;
    public BigInteger money;
}

Я хочу, чтобы атрибут денег сохранялся в монго в виде строки. Но при выборе документов из монго я хочу сериализовать атрибут money в тип BigInteger с помощью какого-либо конструктора.

Как мне сказать Монго сделать это?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Для тех, кто интересуется здесь, есть решение. Вы должны указать пользовательский [BsonSerializer] для поля money Я надеюсь, что это правильный подход.

public class RichPerson
{
    public string name;
    [BsonSerializer(typeof(MySerializer))]
    public BigInteger money;
}

public class MySerializer : SerializerBase<BigInteger>
{
    public override BigInteger Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
    {
        string val = context.Reader.ReadString();
        return BigInteger.Parse(val);
    }

    public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, BigInteger value)
    {
        context.Writer.WriteString(value.ToString());
    }
}
0 голосов
/ 27 июня 2018

Скажите MongoDB, это строка, и она сделает все остальное

public class RichPerson 
   {
      public string name {get; set;}
      [BsonRepresentation(MongoDB.Bson.BsonType.String)]
      public double money {get; set}
   }

Отредактировал ответ, чтобы показать модель, которую я использовал, чтобы она работала с типом данных double, long или decimal. MongoDB не знает biginteger, извините, приятель.

  1. Модель

enter image description here

  1. Сохранить как строку

enter image description here

  1. Возвращает тип в модели (десятичный, длинный или двойной)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...