sql >> Databáze >  >> NoSQL >> MongoDB

Globálně použijte JsonConverter na třídě bez atributu

Ano, můžete použít vlastní IContractResolver pro programové použití JsonConverter do třídy nebo vlastnosti. Nejjednodušší způsob, jak toho dosáhnout, je odvodit svůj resolver z DefaultContractResolver třídy a poté přepište příslušnou metodu. Níže je uveden příklad resolveru, který dává Json.Net pokyn k použití ObjectIdConverter na všech instancích ObjectId typu, bez ohledu na to, v jaké třídě se mohou objevit.

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

Chcete-li použít resolver, můžete vytvořit JsonSerializer a nastavte ContractResolver vlastnost na něm, pak použijte tuto instanci k provedení serializace/deserializace. Pokud používáte JObject.ToObject() a JObject.FromObject() , všimněte si, že obě metody mají přetížení, která přijímají JsonSerializer instance.

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

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

Případně, pokud používáte JsonConvert třídy k provedení serializace/deserializace, můžete vytvořit instanci JsonSerializerSettings , nastavte ContractResolver vlastnost na tom, pak předejte nastavení SerializeObject() a DeserializeObject() metody.

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

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

Doufám, že to pomůže.




  1. Potřebujete pomoc s konceptualizací v Redis/NoSQL

  2. Jak spravovat dokumenty v MongoDB

  3. Jak vypsat všechny databáze MongoDB v Node.js?

  4. jak získat klíče, které neodpovídají konkrétnímu vzoru v redis?