栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使属性反序列化但不使用json.net序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使属性反序列化但不使用json.net序列化

实际上,可以使用几种相当简单的方法来获得所需的结果。

例如,假设您当前定义了这样的类:

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"" }";// deserializeConfig config = JsonConvert.DeserializeObject<Config>(json);// migrateconfig.ReplacementSetting =     new Bang { Value = config.ObsoleteSetting.ToString() };// serializejson = JsonConvert.SerializeObject(config);Console.WriteLine(json);

为了得到这个:

{"ReplacementSetting":{"Value":"Gamma"}}

方法1:添加ShouldSerialize方法

Json.NET可以通过

ShouldSerialize
在类中查找相应的方法来有条件地序列化属性。

若要使用此功能,请

ShouldSerializeBlah()
在您的类中添加一个布尔方法,该方法将
Blah
替换为您不想序列化的属性的名称。使此方法的执行始终返回
false

class Config{    public Fizz ObsoleteSetting { get; set; }    public Bang ReplacementSetting { get; set; }    public bool ShouldSerializeObsoleteSetting()    {        return false;    }}

注意:如果您喜欢这种方法,但又不想通过引入一种

ShouldSerialize
方法弄混类的公共接口,则可以使用an
IContractResolver
来以编程方式执行相同的操作。请参阅文档中的条件属性序列化。

方法2:使用JObjects处理JSON

无需使用

JsonConvert.SerializeObject
序列化方法,
JObject
只需将config对象加载到中,然后在将其写出之前从JSON中删除不需要的属性即可。这只是几行额外的代码。

JObject jo = JObject.FromObject(config);// remove the "ObsoleteSetting" JProperty from its parentjo["ObsoleteSetting"].Parent.Remove();json = jo.ToString();

方法3:巧妙(滥用)属性使用

  1. [JsonIgnore]
    属性应用于您不想序列化的属性。
  2. 向该类添加一个替代的 私有 属性设置器,其类型与原始属性相同。使该属性的实现设置为原始属性。
  3. [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; }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号