वास्तव में कई सरल दृष्टिकोण हैं जिनका उपयोग आप इच्छित परिणाम प्राप्त करने के लिए कर सकते हैं।
उदाहरण के लिए, मान लें कि आपके पास वर्तमान में इस तरह परिभाषित आपकी कक्षाएं हैं:
class Config
{
public Fizz ObsoleteSetting { get; set; }
public Bang ReplacementSetting { get; set; }
}
enum Fizz { Alpha, Beta, Gamma }
class Bang
{
public string Value { get; set; }
}
और आप यह करना चाहते हैं:
string json = @"{ ""ObsoleteSetting"" : ""Gamma"" }";
// deserialize
Config config = JsonConvert.DeserializeObject<Config>(json);
// migrate
config.ReplacementSetting =
new Bang { Value = config.ObsoleteSetting.ToString() };
// serialize
json = JsonConvert.SerializeObject(config);
Console.WriteLine(json);
इसे पाने के लिए:
{"ReplacementSetting":{"Value":"Gamma"}}
दृष्टिकोण 1: एक कंधे विधि जोड़ें
Json.NET में ShouldSerialize
क्लास में संबंधित तरीकों की तलाश करके गुणों को सशर्त रूप से अनुक्रमित करने की क्षमता है ।
इस सुविधा का उपयोग करने के लिए, ShouldSerializeBlah()
अपनी कक्षा में एक बूलियन पद्धति जोड़ें जहां Blah
उस संपत्ति के नाम से प्रतिस्थापित किया जाता है जिसे आप क्रमबद्ध नहीं करना चाहते हैं। इस पद्धति का कार्यान्वयन हमेशा वापस करें false
।
class Config
{
public Fizz ObsoleteSetting { get; set; }
public Bang ReplacementSetting { get; set; }
public bool ShouldSerializeObsoleteSetting()
{
return false;
}
}
नोट: यदि आप इस दृष्टिकोण को पसंद करते हैं, लेकिन आप एक ShouldSerialize
विधि शुरू करके अपनी कक्षा के सार्वजनिक इंटरफ़ेस को खराब नहीं करना चाहते हैं , तो आप IContractResolver
प्रोग्राम को समान रूप से करने के लिए उपयोग कर सकते हैं । दस्तावेज़ीकरण में सशर्त गुण सीरियल देखें ।
दृष्टिकोण 2: जॉन्स को जोबजेक्ट्स के साथ जोड़ दें
JsonConvert.SerializeObject
क्रमांकन करने के लिए उपयोग करने के बजाय , कॉन्फ़िगर ऑब्जेक्ट को एक में लोड करें JObject
, फिर इसे लिखने से पहले JSON से अवांछित संपत्ति को हटा दें। यह कोड की कुछ अतिरिक्त पंक्तियाँ हैं।
JObject jo = JObject.FromObject(config);
// remove the "ObsoleteSetting" JProperty from its parent
jo["ObsoleteSetting"].Parent.Remove();
json = jo.ToString();
दृष्टिकोण 3: विशेषताओं का चतुर (ab) उपयोग
- उस
[JsonIgnore]
गुण पर लागू करें जिसे आप क्रमबद्ध नहीं करना चाहते हैं।
- मूल संपत्ति के समान वर्ग के साथ एक वैकल्पिक, निजी संपत्ति सेटर जोड़ें । उस संपत्ति के कार्यान्वयन को मूल संपत्ति निर्धारित करें।
[JsonProperty]
वैकल्पिक सेटर के लिए एक विशेषता लागू करें , इसे मूल संपत्ति के समान JSON नाम दें।
यहाँ संशोधित Config
वर्ग है:
class Config
{
[JsonIgnore]
public Fizz ObsoleteSetting { get; set; }
[JsonProperty("ObsoleteSetting")]
private Fizz ObsoleteSettingAlternateSetter
{
// get is intentionally omitted here
set { ObsoleteSetting = value; }
}
public Bang ReplacementSetting { get; set; }
}