আপনার পছন্দসই ফলাফলটি অর্জন করতে আপনি বেশ কয়েকটি মোটামুটি সহজ পদ্ধতি ব্যবহার করতে পারেন।
ধরা যাক, উদাহরণস্বরূপ, আপনার ক্লাসগুলি বর্তমানে এটির মতো সংজ্ঞায়িত হয়েছে:
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: একটি হোল্ডসরিয়ালাইজ পদ্ধতি যুক্ত করুন
ক্লাসে সম্পর্কিত 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 থেকে সরান। এটি কোডের কয়েকটি অতিরিক্ত লাইন couple
JObject jo = JObject.FromObject(config);
// remove the "ObsoleteSetting" JProperty from its parent
jo["ObsoleteSetting"].Parent.Remove();
json = jo.ToString();
পদ্ধতির 3: গুণাবলীর চালাক (আব) ব্যবহার
[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; }
}