2010-08-19 2 views
3

사용자가 입력 한 데이터를 파일 및 클라이언트 PC에 저장해야하는 웹 양식이 있는데,이 파일은 저장된 파일에서 읽고 나중에 필드를 다시 채울 수도 있습니다. 어떤 파일도 서버 측에 저장되지 않으므로 스트리밍이 작성 시간에 포함될 필요가 있습니다.asp.net에서 xml 파일을 작성하고 다운로드하는 가장 좋은 방법은 무엇입니까?

XML을 사용하는 것이 쉬운 방법이라고 판단되었지만 방법론에 어려움이 있습니다. XML 문서? XML 작성자? 나는 심지어 내가 원하는 것을 얻기 위해 올바른 검색어로 난처한 상황에 처해있다.

미리 알려 주셔서 감사합니다.

+0

xml 서버 측을 저장하면 훨씬 쉽게 처리 할 수 ​​있습니다. – jrummell

+0

검색어에 'Google에서 쿠키 데이터 쓰기'를 시도하십시오. –

+0

궁금한데 왜 XML을 사용하면 좋은 방법이라고 판단 했습니까? – LarsH

답변

1

당신은 XML 직렬화를 사용하는 것이 좋습니다. 이 MSDN article을보십시오. 여기에 직렬화 및 역 직렬화에 대한 발췌가있다 :

가 어떻게

가 직렬화 객체와 객체를 직렬화하기 위해, 우리는 내장 클래스의 몇 인스턴스가 필요합니다. 따라서 네임 스페이스의 System.Xml에서 XmlDocument 클래스의 인스턴스를 먼저 만들 수 있습니다. 그런 다음 XmlSerializer 클래스의 인스턴스를 System.Xml.Serialization 네임 스페이스 에서 개체 유형으로 매개 변수와 함께 만듭니다. 이제 의 인스턴스를 만들면 네임 스페이스의 System.IO 네임 스페이스에서 일련 번호가 지정된 데이터를 유지하는 데 도움이됩니다. 그래서 모든 인스턴스가 있습니다. 이제 메소드를 호출하고 serialzed 오브젝트를 xml 형식으로 가져와야합니다. 내 객체를 직렬화하는 기능은 다음과 같습니다.

개인 문자열 SerializeAnObject (개체 OBJ)는

{

System.Xml.XmlDocument doc = new XmlDocument(); 

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType()); 

System.IO.MemoryStream stream = new System.IO.MemoryStream(); 

try 

{ 

    serializer.Serialize(stream, obj); 

    stream.Position = 0; 

    doc.Load(stream); 

    return doc.InnerXml; 

} 

catch 

{ 

    throw; 

} 

finally 

{ 

    stream.Close(); 

    stream.Dispose(); 

} 

은}

객체를 직렬화 복원 객체

를 역 직렬화하는 방법

당신은 StringReader를의 인스턴스를 필요 , XmlReader 및 XmlSerializer 클래스 에 xml 데이터 (일련 화 된 데이터)를 읽으려면 을 XmlReader에, DeSerialize를 각각 읽습니다. 그래서 내 함수는 객체를 DeSerialize하기 위해 다음과 같이 보입니다.

개인 객체 DeSerializeAnObject (문자열 xmlOfAnObject)

{

MyClass myObject = new MyClass(); 

System.IO.StringReader read = new StringReader(xmlOfAnObject); 

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(myObject.GetType()); 

System.Xml.XmlReader reader = new XmlTextReader(read); 

try 

{ 

    myObject = (MyClass)serializer.Deserialize(reader); 

    return myObject; 

} 

catch 

{ 

throw; 

} 

finally 

{ 

    reader.Close(); 

    read.Close(); 

    read.Dispose(); 

} 

}

+0

xml을 클라이언트에 다운로드하여 보내 주시면 클라이언트가 변경 사항을 업로드하기 위해 업로드해야합니다. IMO를 사용하면 서버 측에 저장하는 것이 훨씬 더 의미가 있습니다. – jrummell

+0

동의하지만 소량의 데이터에 대해서는 쿠키가 이상적입니다. 그것이 그들이하는 일입니다. 당신이 그곳에 있다는 것에 절대적으로 의존하지 않는 한 그들은 사용자를 위해 더 편리하게 만들어주기 때문에 폼을 다시 채울 필요가 없으며, 쿠키는 서버 측보다 훨씬 빨리 구현됩니다 저장 메커니즘. –

+0

OP가 쿠키 용 데이터를 사용하는 것이 더 나은 옵션 일 수 있습니다. 장기간 보관해야하는 경우 서버 측 XML이 이상적입니다. 그러나 작고 단기적인 클라이언트 저장소 쿠키는 완벽합니다. – jrummell

0

데이터를 쿠키에 저장해야하는 것처럼 들립니다. 브라우저에서 클라이언트 PC의 파일로 쓸 수 없습니다. 브라우저는 악성 웹 사이트로부터 클라이언트 PC를 보호하는 샌드 박스 내에서 작동합니다.

는 클라이언트 시스템에서로/쿠키 데이터를 저장 및 검색에이 페이지를 살펴 보자 :

http://www.aspnettutorials.com/tutorials/network/cookies-csharp.aspx

+0

ActiveX 개체를 사용하지 않는 한 ... 눈과 jrummell이하는 일이라고 생각합니다. 맞습니까? 하지만 IE에서만 작동합니다. – LarsH

+0

@LarsH 사실 모든 사용자가 IE 만 사용한다는 것을 알고 있으면 인트라넷에서 유용합니다. –

+0

그냥 내 의견의 컨텍스트를 명확히하기 위해 ... 나는 당신이 클라이언트 PC의 파일에 브라우저에서 쓸 수 없다는 것을 의미했다. – LarsH

1

클라이언트 측에서 데이터를 저장하기위한 몇 가지 다른 옵션 : 에 대한 정보에 대한 링크가 있습니다 this article보기

  • HTML5 로컬 스토리지는
  • 구글 기어 (설치해야합니다)
  • 야후의 SWFStore가
  • 쿠키 ((브라우저의> 98 %에 설치되어 있다고 플래시를 필요로) (새로운 브라우저가 필요합니다) 소량의 데이터)

큰 질문은 여러 클라이언트 측 브라우저 또는 IE를 지원할 의향이 있습니까? 그것은 어떤 방법을 사용할 것인지를 결정하는 중요한 요인이 될 것입니다.

+0

Silverlight에 추가 - 격리 된 저장소의 클라이언트쪽에 1MB의 데이터를 저장할 수 있습니다. 이 값을 늘릴 수는 있지만 사용자에게 권한을 요청하는 메시지가 표시됩니다. –

관련 문제