[MONGODB] 사용자 정의 직렬화
MONGODB사용자 정의 직렬화
나는 속도라는 이름의 필드가있어 문서, 문제는 이전 개발자가 "N / A"로 설정, 사용할 수없는 그래서 때, 현재의 타입 문자열, 문서 수천 개의 컬렉션이 있습니다. 지금 나는 C #에서 숫자이 필드의 유형을 변경하려면 (0으로 설정을하면 N / A),하지만 난 과거 데이터를로드 할 수 있도록 내가 할 경우. 이 0 N / A 변환합니다 그래서 우리는 직렬화를 사용자 정의 할 수 있습니까?
해결법
-
==============================
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 직렬화의 문서가 있고 여기에서 찾을 수 있습니다
from https://stackoverflow.com/questions/42336751/custom-deserialization by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] Google 클라우드 MongoDB를 : 외부 IP는 연결되지 (0) | 2019.12.26 |
---|---|
[MONGODB] 2.0 드라이버 MongoServer.State 동등한 (0) | 2019.12.26 |
[MONGODB] java.lang.NoClassDefFoundError가는 MongoDB의 드라이버를 사용하는 경우 (0) | 2019.12.26 |
[MONGODB] 키 ID와 같은 MongoDB를 합산 기 (0) | 2019.12.26 |
[MONGODB] 몽구스 반환 기존 필드에 대해 정의되지 (0) | 2019.12.26 |