我有一个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”'的东西。 –