はい、カスタムの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);
これがお役に立てば幸いです。