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