2010-08-16 3 views
0

웹 팜을 사용하도록 ASP.NET 응용 프로그램을 변경하려고합니다. 이렇게하려면 세션 상태를 in-proc에서 State Server로 변경해야합니다. 이렇게하려면 사용되는 클래스를 직렬화 가능으로 표시해야한다는 것이 제 이해입니다. 그것이 수업에서 가능한지 어떻게 알 수 있습니까? 컴파일이 불가능할 경우 컴파일시 오류가 발생합니까?어떤 클래스가 직렬화 가능인지 판단하는 방법

+0

의 중복 가능성 [객체가 C#으로 직렬화 있는지 확인하는 방법] (http://stackoverflow.com/questions/81674/how-to-check-if-an-object- is-serializable -in-c) – ChrisF

+0

가능한 복제본입니다. 그러나 원래 포스터는 직렬화 할 수없는 것을 직렬화하려고하면 어떤 일이 발생하는지 알고 싶어합니다. –

+0

도움이되는 답변을 골라 낼 수 있습니까? 아니면 다른 답을 찾았습니까? 답변을 게시하고 답변으로 표시 할 수 있습니까? 감사! –

답변

1

클래스가 직렬화 가능 여부를 확인하는 방법에 대한 첫 번째 질문에 대한 답변은 다음 설명을 참조하십시오. How to check if an object is serializable in C#

불행히도 .net은 내가 직렬화되어야한다고 생각하는 객체를 직렬화하려고 시도 할 때 기괴한 행동으로 나를 놀라게했습니다.

예를 들어, 내 WCF 프로젝트에서 일련 번호를 지정하고 DataSet 개체를 전송할 수 있습니다. 그러나 개체를 serialize하고 DataTable 개체를 전송하려고하면 빈 DataTable으로 끝납니다. 그 하나를 추적하는 데 시간이 좀 걸렸습니다.

따라서 사용자 지정 클래스를 serialize 할 때 어떤 일이 발생하는지 최소한의 기초적인 테스트를 수행하는 것이 좋습니다.

+1

이것은 답변이 아닙니다. 의견입니다. – ChrisF

1

컴파일 타임에 개체를 serialize해야하는지 여부를 알 수 없으므로 컴파일 타임 예외가 발생하지 않습니다. IIS가 개체를 serialize하려고하면 SerializationException이 표시됩니다.

직렬화 및 직렬화를 시도하는 짧은 스 니펫을 작성할 수 있습니다 ... BinaryFormatter을 사용하여 직렬화하고 쓰기 위해 FileStream을 사용하십시오.

기존 클래스가 ISerializable을 구현하는지 알려주는 ObjectBrowser입니다. 직렬화 할 객체를 찾고 있다면 클래스가 직렬화되도록하려면 클래스가 실제로 직렬화를 위해 설계되어야한다는 것을 명심하십시오. 그렇지 않으면 문제가 있습니다. 예를 들어, MSDN 도움말에서 :

개체가 deserialize되는 순서는 보장 할 수 없습니다. 예를 들어, 한 형식이 아직 deserialize되지 않은 형식을 참조하는 경우 예외가 발생합니다. 그냥 내가 함께 직렬화있어 Exception 교체 ... 여기 직렬화 및 역 직렬화의 간단한 예는 다음과 같습니다 http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx


편집 : ISerializable에서 읽어 보시기 바랍니다

는 ... 여기 링크입니다 자신의 제품 :

BinaryFormatter formatter = new BinaryFormatter(); 

Exception serializedException = new Exception("Testing serialization"); 
Exception deserializedException; 

using (FileStream fileStream = new FileStream(@"C:\SerializationTest.txt", FileMode.CreateNew)) { 
    formatter.Serialize(fileStream, serializedException); 
} 

using (FileStream readStream = new FileStream(@"C:\SerializationTest.txt", FileMode.Open)) { 
    deserializedException = formatter.Deserialize(readStream) as Exception; 
} 

if (deserializedException != null) { 
    throw deserializedException; 
} 
+0

정보를 제공해 주셔서 감사합니다. 어쨌든 BinaryFormatter 및 FileStream을 참조하고있는 것을 보여주는 빠른 코드 스 니핏을 볼 수 있습니까? – user31673

+0

예제 코드가 추가되었습니다. 도움이 되었습니까? –

관련 문제