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

时间:2017-08-02 11:44:50

标签: c# json.net

我正在使用REST Api,我无法控制,并建立了与我从Api收到的json相对应的模型。

有问题的Api虽然不允许我在做一个帖子时推回整个模型所以我需要找到一种方法来完整地反序列化json但只在序列化时写入所选数据。

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

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

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

我也试过看一个自定义的JsonConverter,但似乎我不能打断一个管道,然后必须自己处理所有的写入。我在这里错过了什么,因为它似乎是正确的想法?

有人想方设法在使用Json.Net进行序列化,反序列化时将属性标记为ReadOnly吗?

由于

1 个答案:

答案 0 :(得分:0)

条件序列化属性的一种可能性是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; 
    } 
}