2013-08-14 6 views
0

받은 XML 파일을 직렬화하기 위해 XSD 스키마를 사용할 수 있는지 알지 못했습니다. XSD 파일에서 xsd.exe을 사용하여 cs 클래스를 생성 했으므로 이제 해당 클래스를 사용하여 클래스 속성에서 데이터를 가져와야하지만 한 가지를 놓치고 도움이 필요합니다. 여기드라이브에서 XML 파일을 읽는 대신 XmlDocument 개체를 사용하는 방법?

private void ParseDataFromXmlDocument_UsingSerializerClass(XmlDocument doc) 
{ 
XmlSerializer ser = new XmlSerializer(typeof(ClassFromXsd)); 

      string filename = Path.Combine("C:\\myxmls\\test", "xmlname.xml"); 

      ClassFromXsdmyClass = ser.Deserialize(new FileStream(filename, FileMode.Open)) as ClassFromXsd; 

      if (myClass != null) 
      { 
       // to do 
      } 
... 

내가 드라이브에서 XML 파일을 사용

는 코드입니다. 그리고 내가 전달한 매개 변수에서이 XmlDocument를 사용하고 싶습니다. 어떻게 드라이브에서 XML 대신 doc을 사용하도록이 코드를 수정합니까?

+0

그리고 그는 왜 ... – LunicLynx

답변

2

MemoryStream에 XmlDocument를 쓴 다음 이미 수행 한 것처럼 Deserialize 할 수 있습니다.

XmlDocument doc = new XmlDocument(); 
ClassFromXsd obj = null; 
using (var s = new MemoryStream()) 
{ 
    doc.Save(s); 
    var ser = new XmlSerializer(typeof (ClassFromXsd)); 
    s.Seek(0, SeekOrigin.Begin); 
    obj = (ClassFromXsd)ser.Deserialize(s); 
} 
+0

고마워. 내가 확인하기 위해 오늘까지 몰랐던 한 가지 하위 질문. XSD 파일을 받았고 xsd.exe를 사용하여 cs 클래스를 얻었습니다. 이제 XML을 수신하고 직렬화하면 ORM을 사용할 때처럼 해당 클래스의 모든 데이터에 답안을 작성해야합니다. – 1110

+0

Object Relational Mapper에서 ORM을 의미한다면, DB의 의미에서 ORM과 비교한다면, 전체 파일을 다시 작성하지 않고 삭제 나 업데이트와 같은 비교 기능이 없기 때문에 아니오라고 말할 것입니다. – LunicLynx

+0

또한 XmlDocument에서 XmlSerializer로가는 모든 접근법에 의문을 제기 할 것입니다. 이 기능은 사용자가 언급 한 기능이 어떻게 호출되는지 실제로 변경할 수없는 한 의미가 있습니다. (서명을 변경할 수 없음) – LunicLynx

관련 문제