我有一個EF對象RetailDocuments
。它通過外鍵與DocumentTemplateMaster
對象相關。許多RetailDocuments
可以具有相同的DocumentTemplateMaster
。Newtonsoft不是序列化導航屬性
我在檢索List<RetailDocument>
並關閉了代理創建和延遲加載。引用的DocumentTemplateMaster
對象在List中,但在序列化時不存在。
我試過很多我在這裏看過的解決方案,但是無論出於何種原因,它都不適合我。
這裏是我的代碼,註釋代碼顯示的東西,我做過嘗試,但似乎並沒有有所作爲:
using (RetailDocumentEntities db = new RetailDocumentEntities()) {
db.Configuration.ProxyCreationEnabled = false;
db.Configuration.LazyLoadingEnabled = false;
List<RetailDocument> retailDocuments =
retailDocuments = db.RetailDocument.Include("DocumentTemplateMaster").where(x=>x.col2 = "someVal").ToList();
JsonSerializerSettings serializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects };
string retVal = JsonConvert.SerializeObject(retailDocuments, Formatting.Indented, serializerSettings);
//JsonSerializerSettings settings = new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Serialize};// PreserveReferencesHandling = PreserveReferencesHandling.Objects};// ReferenceLoopHandling = ReferenceLoopHandling.Serialize, ReferenceLoopHandling = ReferenceLoopHandling.Serialize };
//string retVal = Newtonsoft.Json.JsonConvert.SerializeObject(retailDocuments, settings);
return retVal;
}
之前,我把它序列化,DocumentTemplateMaster
顯示爲在列表導航屬性,因爲它但應該在序列化時丟失。我敢肯定這是一件我很想念的傻事,但它是什麼?
編輯:上下文已定義,包含在那裏。引用的DocumentTemplateMaster在檢索列表中。這不是問題。 問題出在序列化,因爲它不是序列化的字符串
如果'db'是新的上下文實例,則在運行顯示的代碼後,*不能包含'DocumentTemplateMaster'對象。你如何檢查它的存在? –
查看更新的代碼。我認爲可以理解上下文是定義的:/無論如何,在調試模式下,我可以清楚地看到Document TemplateMaster。 – MetalPhoenix
啊,所以你包括它,很高興知道......你有'PreserveReferencesHandling = PreserveReferencesHandling.Objects',所以你只能在Json中看到一些'DocumentTemplateMaster's。在大多數地方你應該看到類似'「$ ref」:「2」'的東西。 –