sql >> Databasteknik >  >> NoSQL >> MongoDB

Använd en JsonConverter globalt på en klass utan attributet

Ja, du kan använda en anpassad IContractResolver för att programmässigt tillämpa en JsonConverter till en klass eller fastighet. Det enklaste sättet att göra detta är att härleda din resolver från DefaultContractResolver klass och åsidosätt sedan lämplig metod. Nedan finns ett exempel på resolver som instruerar Json.Net att använda en ObjectIdConverter på alla instanser av ObjectId typ, oavsett vilken klass de kan förekomma 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;
    }
}

För att använda resolvern kan du konstruera en JsonSerializer instans och ställ in ContractResolver egenskap på den, använd sedan den instansen för att göra din serialisering/deserialisering. Om du använder JObject.ToObject() och JObject.FromObject() , notera att båda metoderna har överbelastningar som accepterar en JsonSerializer instans.

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

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

Alternativt, om du använder JsonConvert klass för att göra din serialisering/deserialisering, kan du skapa en instans av JsonSerializerSettings , ställ in ContractResolver egenskap på det och skicka sedan inställningarna till SerializeObject() och DeserializeObject() metoder.

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

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

Hoppas detta hjälper.




  1. Att använda sed på variabeln xargs fungerar inte inuti skalexpansion

  2. Apache Hadoop Ozon Security – Autentisering

  3. Installerar du PHP 7 MongoDB-klienten/drivrutinen?

  4. Hur man visualiserar Resque-användning med Node.js, WebSockets och Redis