Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化实体对象时的IndexOutOfRangeException_C#_Entity Framework_Wcf_Serialization - Fatal编程技术网

C# 序列化实体对象时的IndexOutOfRangeException

C# 序列化实体对象时的IndexOutOfRangeException,c#,entity-framework,wcf,serialization,C#,Entity Framework,Wcf,Serialization,我将WCF与实体框架一起使用。我有一个Web服务,它返回一个指向某个实体对象数组的对象。当Silverlight客户端调用该方法时,我得到一个“NotFound”异常 我查看了WCF日志和事件日志,发现错误是序列化对象时出现的IndexOutOfRangeException。当我分析以下内容时,发现了一个大的堆栈跟踪。在此之前,我的模型的一个片段(为了便于理解,我翻译了名称): 实体基本项: (部分物业) 详细项目[]详细信息; 实体详细信息项: (部分物业) 相关项目外部信息; 实体相关项:

我将WCF与实体框架一起使用。我有一个Web服务,它返回一个指向某个实体对象数组的对象。当Silverlight客户端调用该方法时,我得到一个“NotFound”异常

我查看了WCF日志和事件日志,发现错误是序列化对象时出现的IndexOutOfRangeException。当我分析以下内容时,发现了一个大的堆栈跟踪。在此之前,我的模型的一个片段(为了便于理解,我翻译了名称):

实体基本项: (部分物业) 详细项目[]详细信息; 实体详细信息项: (部分物业) 相关项目外部信息; 实体相关项: (部分物业) 然后我有了这个调用堆栈:

(...) in WriteArrayOfDetailItemToXml(...) (...) in WriteBaseItemToXml(...) (...) in WriteDetailItemToXml(...) (...) in WriteArrayOfDetailItemToXml(...) (...) in WriteRelatedItemToXml(...) (...) in WriteDetailItemToXml(...) (...) ib WriteArrayOfDetailItemToXml(...) (...) em WriteBaseItemToXml(...) em System.Runtime.Serialization.ClassDataContract.WriteXmlValue(...) (...) 以书面形式向DETALITEMTOXML(…) (...) 以写形式的SeitemToXML(…) (...) 书面形式的tailitemtoxml(…) (...) 以书面形式向DETALITEMTOXML(…) (...) 以WriteRelatedItemToXml(…) (...) 书面形式的tailitemtoxml(…) (...) ib WriteArrayOfDetailItemToXml(…) (...) em WriteBaseItemToXml(…) em System.Runtime.Serialization.ClassDataContract.WriteXmlValue(…) 在我看来,序列化程序进入了一个递归循环,试图写入所有属性,包括交互属性(我不知道这是否是名称,我指的是框架在关系两侧生成的属性)


有人知道可能发生的情况以及导致此错误的原因吗?

请注意序列化和启用延迟加载,因为通常会有序列化整个数据库的风险。。。关于这一点,有几篇文章。当然,如果您有一个公共属性,序列化程序将读取它,框架将从数据库中检索它(如果您启用了延迟加载)。我如何知道是否启用了延迟加载?它是上下文context.Configuration.LazyLoadingEnabled的一个属性。我在MSDN上找到了这篇文章,其中也谈到了序列化。它只是说了我以前写的…注意序列化和启用延迟加载,因为通常您会冒序列化整个数据库的风险。。。关于这一点,有几篇文章。当然,如果您有一个公共属性,序列化程序将读取它,框架将从数据库中检索它(如果您启用了延迟加载)。我如何知道是否启用了延迟加载?它是上下文context.Configuration.LazyLoadingEnabled的一个属性。我在MSDN上找到了这篇文章,其中也谈到了序列化。它只是说我以前写的。。。 (...) in WriteArrayOfDetailItemToXml(...) (...) in WriteBaseItemToXml(...) (...) in WriteDetailItemToXml(...) (...) in WriteArrayOfDetailItemToXml(...) (...) in WriteRelatedItemToXml(...) (...) in WriteDetailItemToXml(...) (...) ib WriteArrayOfDetailItemToXml(...) (...) em WriteBaseItemToXml(...) em System.Runtime.Serialization.ClassDataContract.WriteXmlValue(...)