복붙노트

[MONGODB] 사용자 정의 직렬화

MONGODB

사용자 정의 직렬화

나는 속도라는 이름의 필드가있어 문서, 문제는 이전 개발자가 "N / A"로 설정, 사용할 수없는 그래서 때, 현재의 타입 문자열, 문서 수천 개의 컬렉션이 있습니다. 지금 나는 C #에서 숫자이 필드의 유형을 변경하려면 (0으로 설정을하면 N / A),하지만 난 과거 데이터를로드 할 수 있도록 내가 할 경우. 이 0 N / A 변환합니다 그래서 우리는 직렬화를 사용자 정의 할 수 있습니까?

해결법

  1. ==============================

    1.당신은 IBsonSerializer 또는 SerializerBase을 <생성>하고 BsonSerializerAttribute를 사용하여 직렬화하려는 속성에 연결해야합니다. 다음과 같은 뭔가 :

    당신은 IBsonSerializer 또는 SerializerBase을 <생성>하고 BsonSerializerAttribute를 사용하여 직렬화하려는 속성에 연결해야합니다. 다음과 같은 뭔가 :

    public class BsonStringNumericSerializer : SerializerBase<double>
    {
        public override double Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var type = context.Reader.GetCurrentBsonType();
            if (type == BsonType.String)
            {
                var s = context.Reader.ReadString();
                if (s.Equals("N/A", StringComparison.InvariantCultureIgnoreCase))
                {
                    return 0.0;
                }
                else
                {
                    return double.Parse(s);
                }
            }
            else if (type == BsonType.Double)
            {
                return context.Reader.ReadDouble();
            }
            // Add any other types you need to handle
            else
            {
                return 0.0;
            }
        }
    }
    
    public class YourClass
    {
        [BsonSerializer(typeof(BsonStringNumericSerializer))]
        public double YourDouble { get; set; }
    }
    

    당신이 사용하지 않을 경우 당신은 IBsonSerializationProvider을 만들고 BsonSerializer.RegisterSerializationProvider를 사용하여 등록 할 수 있습니다 속성.

    MongoDB를 C # Bson 직렬화의 문서가 있고 여기에서 찾을 수 있습니다

  2. from https://stackoverflow.com/questions/42336751/custom-deserialization by cc-by-sa and MIT license