हाँ, आप एक कस्टम IContractResolver
. का उपयोग कर सकते हैं प्रोग्रामेटिक रूप से एक JsonConverter
लागू करने के लिए एक वर्ग या संपत्ति के लिए। ऐसा करने का सबसे आसान तरीका है अपने रिज़ॉल्वर को DefaultContractResolver
. से प्राप्त करना class और फिर उपयुक्त विधि को ओवरराइड करें। नीचे एक उदाहरण समाधानकर्ता है जो 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
सेट करें उस पर संपत्ति, फिर उस उदाहरण का उपयोग अपने क्रमबद्धता/deserialization करने के लिए करें। यदि आप JObject.ToObject()
. का उपयोग कर रहे हैं और JObject.FromObject()
, ध्यान दें कि दोनों विधियों में ओवरलोड हैं जो एक JsonSerializer
. को स्वीकार करते हैं उदाहरण।
JsonSerializer serializer = new JsonSerializer();
serializer.ContractResolver = new CustomResolver();
JObject jo = JObject.FromObject(foo, serializer);
वैकल्पिक रूप से, यदि आप JsonConvert
. का उपयोग कर रहे हैं अपना क्रमांकन/deserialization करने के लिए कक्षा, आप JsonSerializerSettings
का एक उदाहरण बना सकते हैं , ContractResolver
सेट करें उस पर संपत्ति, फिर सेटिंग्स को SerializeObject()
. पर पास करें और DeserializeObject()
तरीके।
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new CustomResolver();
Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);
आशा है कि यह मदद करता है।