sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb brugerdefineret samling serializer

Mange tak Anton Putau for den enklest mulige løsning.

Men der er en anden. Sådan serialiseres objekter manuelt:

public class MyListAnimalSerializer :SerializerBase>{ public override void Serialize(MongoDB.Bson.Serialization.BsonSerializationContext context, MongoDB.Bson.Serialization.BsonSerializationArgs args, List value) {context. Writer.WriteStartArray(); foreach (Animal mvnt in value) { context.Writer.WriteStartDocument(); switch (mvnt.GetType().Name) { case "Tiger"://din serialisering her pause; case "Zebra"://din serialisering her går i stykker; default:break; } context.Writer.WriteEndDocument(); } context.Writer.WriteEndArray(); } public override List Deserialize(MongoDB.Bson.Serialization.BsonDeserializationContext kontekst, MongoDB.Bson.Serialization.BsonDeserializationArgs args) { context.Reader.ReadStartArray(); Liste resultat =ny Liste(); while (true) { try { //this catch block behøver kun at identificere slutningen af ​​Array-konteksten.Reader.ReadStartDocument(); } catch (Exception exp) { context.Reader.ReadEndArray(); pause; } var type =context.Reader.ReadString(); var _id =context.Reader.ReadObjectId(); var name =context.Reader.ReadString(); if (type =="Tiger") { double tiger_height =context.Reader.ReadDouble(); result.Add(new Tiger() { Id =id, Name =animal_name, Height =tiger_height }); } andet { long zebra_stripes =context.Reader.ReadInt64(); result.Add(return new Zebra() { Id =id, Name =animal_name, StripesAmount =zebra_stripes }); } context.Reader.ReadEndDocument(); } returner resultat; }} 

Og bare du skal kommentere feltet IEnumerable for at bruge din serializer:

[BsonSerializer(typeof(MyListAnimalSerializer))]offentlig liste Dyr { get; sæt; }

  1. Brug af Hive til at interagere med HBase, del 1

  2. Redis opdaterer ikke, når mange forespørgsler på én gang

  3. Mongoose:Fjern objekt fra array baseret på ID (Cast Error)

  4. Hvordan ved Spring Data, hvilken butik man skal sikkerhedskopiere et lager med, hvis der bruges flere moduler?