0
我有一個類,它包含一個DateTime屬性,我將其作爲WriteJson覆蓋中的數組寫入,並從JsonRead覆蓋中的數組中讀取,當從Divan沙發上保存/加載時。ReadJson和WriteJson與Divan couchdb一起使用,但不與Newtonsoft的Json.Net
我的問題是,我使用http將Newtonsoft.Json序列化的字符串傳遞給我的應用程序(在單獨的計算機上運行)的另一個實例,但Newtonsoft不會觸發我的覆蓋進行讀取/寫入。
相反,Newtonsoft試圖從字符串解析json屬性而不是數組(我認爲Newtonsoft的JsonConverter的默認行爲是?),我無法改變它的工作方式,因爲它需要能夠與來自舊系統的文件。
如何讓Json.net調用ReadJson和WriteJson的重寫?
public class JobResults : CouchDocument, ICanJson
{
[JsonProperty("update-datetime")]
public DateTime UpdateDateTime = new DateTime(1, 1, 1, 0, 0, 0);
[JsonProperty("job-ids")]
public JArray JobIDs = new JArray();
#region CouchDocument Members
public override void WriteJson(JsonWriter writer)
{
base.WriteJson(writer);
writer.WritePropertyName("update-datetime");
writer.WriteStartArray();
writer.WriteValue(UpdateDateTime.Year);
writer.WriteValue(UpdateDateTime.Month);
writer.WriteValue(UpdateDateTime.Day);
writer.WriteValue(UpdateDateTime.Hour);
writer.WriteValue(UpdateDateTime.Minute);
writer.WriteValue(UpdateDateTime.Second);
writer.WriteEndArray();
writer.WritePropertyName("job-ids");
writer.WriteStartArray();
foreach (string i in JobIDs)
writer.WriteValue(i);
writer.WriteEndArray();
}
public override void ReadJson(JObject obj)
{
base.ReadJson(obj);
var dt = obj["update-datetime"].Value<JArray>();
UpdateDateTime = new DateTime((int)dt[0], (int)dt[1], (int)dt[2], (int)dt[3], (int)dt[4], (int)dt[5]);
JobIDs = obj["job-ids"].Value<JArray>();
}
#endregion
}
hmm ...似乎是CouchDocument不繼承JsonConverter,並且事實上繼承了具有ReadJson和WriteJson方法的ICanJson。我無法更改我使用的Divan版本,也無法從ICanJson和JsonConverter繼承 –