2009-12-23 6 views
3

ViewState 안에 XML 문서를 저장하고 싶습니다. 따라서 각 게시물마다 실제 경로에서 다시로드 할 필요가 없습니다. SessionState에도 저장하고 싶지 않습니다.xmlDocument 객체를 ViewState에 저장할 수 있습니까?

예외 정보 : System.Runtime.Serialization.SerializationException : 나는 오류 얻을의 ViewState에서 그것을 srote하려고

총회 '에서 System.Xml에서 유형'System.Xml.XmlDocument '을, 버전 = 2.0 .0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 '이 (가) 직렬화 가능으로 표시되어 있지 않습니다.

내 속성은이 같은 것입니다 :

가 어떻게 다음 XML 문서를 직렬화 할 수

private XmlDocument MyDocument  { 
     get 
     { 
      object viwObj = ViewState["MyDocument"]; 
      if (viwObj != null) 
       return (XmlDocument)viwObj; 

      XmlDocument xmlDoc = GetMyDocument(); 
      ViewState["MyDocument"] = xmlDoc; 

      return xmlDoc; 
     } 
    } 
?

감사

답변

3

XmlDocument을 XML 문자열로 serialize하고 해당 문자열을 ViewState에 저장할 수 있습니다.

직렬화 :

using (var sw = new StringWriter()) 
using (var xw = new XmlTextWriter(sw)) 
{ 
    xmlDoc.WriteTo(xw); 
} 

ViewState["MyDocument"] = sw.ToString() 

역 직렬화 :

var xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml((string) ViewState["MyDocument"]); 

가장 가능성을 무시하기를 원할 것입니다 수 있도록 직렬화 이런 종류의 정말하는 GET/설정 특성에 맞지 않는 SaveViewState()LoadViewState() 사용자 정의 컨트롤/페이지의 메서드를 사용하고 이들 안에 serialization/deserialization 논리를 추가하십시오.

+0

감사합니다. 정말 유용한 정보였습니다. Jørn Schou-Rode! – pencilCake

0

당신은 항상 단지의 문자열 표현으로 XML 문서를 변환하고 viewstate가에 있음/부하를 절약 할 수있다. 이 문서가 비교적 작은 것이 좋겠습니까?

관련 문제