sql >> Database >  >> NoSQL >> MongoDB

Gebruik globaal een JsonConverter voor een klasse zonder het attribuut

Ja, u kunt een aangepaste IContractResolver . gebruiken om programmatisch een JsonConverter toe te passen naar een klasse of eigendom. De eenvoudigste manier om dit te doen, is door uw resolver af te leiden uit de DefaultContractResolver class en overschrijf vervolgens de juiste methode. Hieronder staat een voorbeeldresolver die Json.Net instrueert om een ​​ObjectIdConverter te gebruiken op alle instanties van de ObjectId type, ongeacht in welke klasse ze kunnen voorkomen.

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

Om de resolver te gebruiken, kunt u een JsonSerializer . maken instantie en stel de ContractResolver eigenschap erop, gebruik dan die instantie om uw serialisatie / deserialisatie uit te voeren. Als u JObject.ToObject() . gebruikt en JObject.FromObject() , houd er rekening mee dat beide methoden overbelastingen hebben die een JsonSerializer accepteren instantie.

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

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

Als alternatief, als u de JsonConvert . gebruikt class om uw serialisatie/deserialisatie uit te voeren, kunt u een instantie maken van JsonSerializerSettings , stel de ContractResolver . in eigenschap daarop en geef de instellingen vervolgens door aan de SerializeObject() en DeserializeObject() methoden.

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

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

Ik hoop dat dit helpt.




  1. Collecties maken, tonen en neerzetten in MongoDB

  2. SQL-RPAD()

  3. wat zijn pagecache, dentries, inodes?

  4. MongoDB $substrCP