我使用json.net來反序列化我的json字符串到我的模型。下面 是什麼,我想實現的,請指教什麼是最好的方式..自動選擇參數化構造函數,而JsonCovertor反序列化
當沒有數據我的反應看起來像下面 json string = "{\"message\":\"SUCCESS\",\"result\":null}"
結果最終被綁定到一個視圖。所以當響應爲空時,我想用默認模型值初始化我的視圖。因此想要在反序列化中調用Default構造函數。默認的構造函數如下所示。
public ProfileModel()
{
this.DefaultTab = DefaultTabOption.PROFILE;
this.DataLoadPosition = new DataLoadPositionOptionsModel();
this.DataLayout = new DataLayoutOptionsModel();
this.NAData = new NADataOptionsModel();
this.DataTable = new DataDisplayOptionsModel();
}
但是,當有數據時,響應如下所示。
{"message":"SUCCESS","result":{"dataLayout":{"vertical":false},"dataLoadPosition":{"cell":"B2","cursorLocation":false},"dataTable":{"decimalPts":1},"defaultTab":"BROWSE","naData":{"custom":"","naDataOption":"FORWARDFILL"}}}
在這種情況下,我想調用我的參數化構造函數,以便模型正確初始化。
反序列化代碼:
using (StreamReader reader = new StreamReader(responseStream))
{
var t = JsonConvert.DeserializeObject<T>(reader.ReadToEnd());
return t;
}
其中T是initilialises多個模型我的主要模式。下面是參數化的構造函數。
public ProfileModel(DefaultTabOption defaultTabModel,
DataLoadPositionOptionsModel dataLoadPositionOption ,
DataLayoutOptionsModel dataLayoutOptios ,
NADataOptionsModel naDataOptions ,
DataDisplayOptionsModel dataTableOptions)
{
this.DefaultTab = defaultTabModel;
this.DataLoadPosition = dataLoadPositionOption;
this.DataLayout = dataLayoutOptios;
this.NAData = naDataOptions;
this.DataTable = dataTableOptions;
}
什麼是反序列化的最佳方式,以便在null和parameterized時調用默認構造函數的時候調用not null。我試過ConstructorHandling
,NullValueHandling
,但我無法達到預期的效果。