2010-04-22 1 views
8

XML을 문자열 형식으로 허용하는 .Net 웹 서버가 있습니다. XML webservice에 전송 된 문자열은 시스템의 모든 객체를 나타낼 수 있습니다. 첫 번째 노드에서 XML 문자열을 deserialize 할 객체를 찾아야합니다. 이를 위해 XML을 XMLDocument에로드해야합니다 (RegEx 또는 문자열 비교를 사용하고 싶지는 않음). Deserialize하는 방법이 있다면 XMLDocument/XMLNode 오히려 일부 성능을 저장하기 위해 문자열을 deserializing하는 것이 궁금합니다? XMLNode 문자열을 직렬화하는 성능 이점이 있습니까? 당신이 XmlDocument이있는 경우C#에서 객체에 XMLDocument를 비 직렬화하는 방법은 무엇입니까?

방법은 XmlSerializer에 전달하는 XmlReaderXmlNodeReader을 사용할 수 있습니다,이 XMLDocument에게

public void LoadFromString(String s) 
{ 
    m_XmlDoc = new XmlDocument(); 
    m_XmlDoc.LoadXml(s);   
} 

감사

답변

22

를로드 할 수 있지만,이 그것을 할 더 나은 것이 있는지 궁금해 다른 방법;

[XmlRoot("foo")] 
public class Foo 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 
} 
static class Program 
{ 
    static void Main() 
    { 
     string xml = "<foo id='123'/>"; 
     object obj; 
     using (XmlReader reader = XmlReader.Create(new StringReader(xml))) 
     { 
      reader.MoveToContent(); 
      switch (reader.Name) 
      { 
       case "foo": 
        obj = new XmlSerializer(typeof(Foo)).Deserialize(reader); 
        break; 
       default: 
        throw new NotSupportedException("Unexpected: " + reader.Name); 
      } 
     }    
    } 
} 
+0

젠장, 마침내 내 눈을 감고 대답 할 수있는 질문을했다. 당신은 나를 때렸다. :). – johnc

+0

감사합니다. 나는 이것을 시도 할 것입니다. – Deepfreezed

2

는 XML에 강력한 경쟁자, LINQ를 잊지 마세요 XmlSerializer- 그 ... 가장 바깥쪽에있는 요소 이름을 얻기 위해 XmlReader을 사용하고 을 줘!

XElement root = XElement.Load(myfile); 

var foos = root.Descendants("Foo").Where(e => e.Attribute("bar") != null); 
+0

응용 프로그램 작업 중입니다 .Net 2.0에 붙어 있습니다. 나는 그것이 사실이 아니길 바란다. – Deepfreezed

+0

System.Xml.Linq를 프로그램 참조에 추가하는 것을 잊지 마십시오. –