SQL 세션 상태/InProc 세션 상태로 직렬화 할 때 .NET 런타임에서 개체 참조를 유지합니까? 직렬화/직렬화 중? 다음 예제에서는 참조가 동일한 객체를 가리 키도록 기대합니다. 누군가 이것이 왜 그런지 설명 할 수 있습니까?개체 직렬화 및 참조 동등한
예컨대 :
var list = new List<Foo> { new Foo { Name = "foo" }, new Foo { Name = "bar" } };
var bar = list.Single(x => x.Name == "bar");
Session["list"] = list;
Session["bar"] = bar;
var listDeserialized = (List<Foo>)Session["list"];
var barDeserialized = (Foo)Session["bar"];
Assert.IsTrue(Object.ReferenceEquals(listDeserialized[1], bar)); // false
/* class definition */
[Serializable]
public class Foo {
public string Name { get; set; }
}
참고 : list
및 bar
객체가 이미 직렬화 된 것을/SQL에 지속을 가정합니다.
어떻게 동일한 참조를 유지할 수 있습니까? 참조는 메모리 조각에 대한 포인터 일 뿐이므로 일단 비 직렬화하면 새로운 조각을 할당하고 그 안에 객체를 넣습니다. – DoctorMick