JsonConvert .NET 序列化/反序列化只读

合法开发商

我目前正在使用 REST Api,我无法控制它并构建了模型以与我从 Api 收到的 json 对应。

尽管有问题的 Api 不允许我在发布帖子时将整个模型推回,因此我需要找到一种方法来完全反序列化 json,但仅在序列化时写入选定的数据。

到目前为止,我已经尝试过 JsonIgnore,它执行它在罐头上所说的并且完全忽略了该属性。

然后我创建了一个自定义属性 JsonWriteAttribute 并将其应用于我想要序列化的属性。

我已经看过覆盖 DefaultContractResolver CreateProperties 方法,然后只获取具有该属性的属性,但如果我正在执行读取或写入操作,我似乎无法从解析器中的方法或属性中确定。

我也试过查看自定义 JsonConverter,但似乎我无法中断管道,然后必须自己处理所有写入。我是否在这里遗漏了一些东西,因为这似乎是正确的想法?

有没有人想出一种在使用 Json.Net 进行序列化、反序列化时将属性标记为只读的方法?

谢谢

杰森·凯瑟史密斯

条件序列化属性的一种可能性是 ShouldSerialize

http://www.newtonsoft.com/json/help/html/ConditionalProperties.htm

您创建了一个返回 bool 的方法,以确定您的属性是否应该被序列化。该方法以 ShouldSerialize 开头并以您的属性名称结尾。例如ShouldSerializeMyProperty

一个例子

public MyClass
{   
    public string MyProp { get; set; }
    public string ExcludeThisProp { get; set; }
    public int MyNumber { get; set; }
    public int ExcludeIfMeetsCondition { get; set; }

    //Define should serialize options       
    public bool ShouldSerializeExcludeMyProp() { return (false); } //Will always exclude
    public bool ShouldSerializeExcludeIfMeetsCondition() 
    { 
        if (ExcludeIfMeetsCondition > 10)
            return true;
        else if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
            return true;
        else
            return false; 
    } 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章