EF 4 STE 그래프를 serialize하는 동안 매우 흥미로운 예외가 발생했습니다.EF DataContractSerializer 예외
System.IndexOutOfRangeException was caught
Message=Index was outside the bounds of the array.
Source=mscorlib
StackTrace:
Server stack trace:
at System.Runtime.Serialization.ObjectReferenceStack.EnsureSetAsIsReference(Object obj)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.OnHandleIsReference(XmlWriterDelegator xmlWriter, DataContract contract, Object obj)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
...
at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph)
at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(Stream stream, Object graph)
내 직렬화 코드는 매우 간단하다 : 내 객체 그래프에서
using (MemoryStream memoryStream = new MemoryStream())
{
DataContractSerializer dc = new DataContractSerializer(data.GetType());
dc.WriteObject(memoryStream, data);
memoryStream.Flush();
memoryStream.Position = 0;
StreamReader reader = new StreamReader(memoryStream);
var serializedObject = reader.ReadToEnd();
}
, 나는 부모 엔티티에 몇 아이 엔티티를 추가 한, 내가 발견 한 나는를 호출하는 경우 그. 부모에 대한 AcceptChanges() 확장 메서드는 모든 것이 잘 serialize합니다.
다른 사람이 이런 문제가 발생 했습니까? 무엇 때문에 그 원인이 될 수 있습니까? 범인을 어떻게 내쫓을 수 있을지에 대한 아이디어가 있습니까?
업데이트 : 다른 사람이 비슷한 문제가있는 link을 발견했습니다. 그들은 System.Runtime.Serialization.ObjectReferenceStack.EnsureSetAsIsReference)가 몇 가지주기 유효성 검사를 수행 중이며 문제를 찾을 수 있다고 말했습니다.
업데이트 2 : DataContractSerializer의 생성자에서 preserveObjectReferences를 true로 설정하면 예외가 지워집니다.
업데이트 3 : preserveObjectReferences가 true로 설정된 오버로드 된 DataContractSerializer 생성자를 호출하려면 this article에 설명 된 방법을 사용하여 종료해야합니다. 가 어떻게 모두에 대한 것보다 다르게 DataContractSerializer에 preserveObjectReferences [DataContract (IsReference = TRUE)]이다 : 나는 아직도 그것을 설명 할 수 있지만이
가 가그래서 어쩌면 지금, 내 질문이된다 ...이 문제를 해결 STE?
감사!