हाँ, आप एक कस्टम 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);
आशा है कि यह मदद करता है।