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

Brug globalt en JsonConverter på en klasse uden attributten

Ja, du kan bruge en tilpasset IContractResolver at programmere anvende en JsonConverter til en klasse eller ejendom. Den nemmeste måde at gøre dette på er at udlede din resolver fra DefaultContractResolver klasse og derefter tilsidesætte den relevante metode. Nedenfor er et eksempel på en resolver, der instruerer Json.Net til at bruge en ObjectIdConverter på alle forekomster af ObjectId type, uanset hvilken klasse de måtte optræde i.

class CustomResolver : DefaultContractResolver
{
    protected override JsonObjectContract CreateObjectContract(Type objectType)
    {
        JsonObjectContract contract = base.CreateObjectContract(objectType);
        if (objectType == typeof(ObjectId))
        {
            contract.Converter = new ObjectIdConverter();
        }
        return contract;
    }
}

For at bruge resolveren kan du konstruere en JsonSerializer instans og indstil ContractResolver egenskab på den, og brug derefter den instans til at udføre din serialisering/deserialisering. Hvis du bruger JObject.ToObject() og JObject.FromObject() , bemærk, at begge metoder har overbelastninger, der accepterer en JsonSerializer eksempel.

JsonSerializer serializer = new JsonSerializer();
serializer.ContractResolver = new CustomResolver();

JObject jo = JObject.FromObject(foo, serializer);

Alternativt, hvis du bruger JsonConvert klasse for at udføre din serialisering/deserialisering, kan du oprette en forekomst af JsonSerializerSettings , indstil ContractResolver egenskab på det, og send derefter indstillingerne til SerializeObject() og DeserializeObject() metoder.

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new CustomResolver();

Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);

Håber dette hjælper.




  1. Hvilken SchemaType i Mongoose er bedst til tidsstempel?

  2. Match med understreng i mongodb-aggregering

  3. MongoDB $acosh

  4. MongoDB - Tilladelse nægtet til socket:/tmp/mongodb-27017.sock