sql >> データベース >  >> NoSQL >> MongoDB

属性のないクラスでJsonConverterをグローバルに使用する

    はい、カスタムのIContractResolverを使用できます プログラムでJsonConverterを適用します クラスまたはプロパティに。これを行う最も簡単な方法は、DefaultContractResolverからリゾルバーを派生させることです。 クラスを作成してから、適切なメソッドをオーバーライドします。以下は、Json.NetにObjectIdConverterを使用するように指示するリゾルバーの例です。 ObjectIdのすべてのインスタンス 表示される可能性のあるクラスに関係なく、入力します。

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

    リゾルバーを使用するには、JsonSerializerを作成します。 インスタンスを作成し、ContractResolverを設定します その上でプロパティを作成し、そのインスタンスを使用してシリアル化/逆シリアル化を実行します。 JObject.ToObject()を使用している場合 およびJObject.FromObject() 、両方のメソッドにJsonSerializerを受け入れるオーバーロードがあることに注意してください インスタンス。

    JsonSerializer serializer = new JsonSerializer();
    serializer.ContractResolver = new CustomResolver();
    
    JObject jo = JObject.FromObject(foo, serializer);
    

    または、JsonConvertを使用している場合 シリアル化/逆シリアル化を行うクラスでは、JsonSerializerSettingsのインスタンスを作成できます。 、ContractResolverを設定します その上でプロパティを取得し、設定をSerializeObject()に渡します。 およびDeserializeObject() メソッド。

    JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.ContractResolver = new CustomResolver();
    
    Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);
    

    これがお役に立てば幸いです。




    1. socket.ioredisとメモリリーク

    2. redis.confのtcp-backlogとは

    3. Hadoopエコシステム–Hadoopコンポーネントの概要

    4. Redisでセットを空/削除しますか?