2017-08-02 94 views
1

我正在使用REST API,目前我無法控制並且已經構建了模型來與我從Api接收的json相對應。JsonConvert .NET序列化/反序列化只讀

有問題的Api雖然不允許我推送整個模型時做一個帖子,所以我需要找到一種方法來完全反序列化JSON,但只有在序列化時寫入選定的數據。

到目前爲止,我已經嘗試過JsonIgnore,它在錫上表示完全忽略了它的屬性。

然後我創建了一個自定義屬性JsonWriteAttribute,並將其應用到我想串行化的屬性。

我已經看過重寫DefaultContractResolver的CreateProperties方法,然後只獲得屬性的屬性,但我似乎無法確定從方法或解析器中的屬性,如果我正在讀或寫。

我也試過看看一個自定義的JsonConverter,但它似乎是從我不能中斷管道,然後處理所有的寫自己。我在這裏錯過了什麼,因爲它看起來是正確的想法?

當使用Json.Net進行序列化,反序列化時,任何人都想出了一種將屬性標記爲ReadOnly的方法?

感謝

+0

您可以使用兩個班,一個來自其他遺傳,然後序列化父類和反序列化到子類? –

+0

我最近做了一些相當類似的事情,並使用了自定義的JsonConverter選項。我所做的是將自定義屬性添加到屬性中,並在自定義JsonConverter中使用Reflection來獲取所有屬性並根據屬性更改序列化邏輯。認爲沿着這些線應該爲你工作。 – ajg

回答

0

一種可能性有條件還原序列化的屬性是ShouldSerialize

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

創建它返回一個布爾值,以確定您的屬性應序列化與否的方法。該方法從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; 
    } 
}