2013-02-24 2 views
3

일반 XML 파일이 있습니다. 일부 XSD.EXE 마술을 통해 모델을 만들었습니다. 이제 모델에 XML 데이터를 읽으 려합니다. 보통 이것은 단지 XmlSerializer.Deserialize이지만, 네임 스페이스와 이것 저것에 대해서 불평을 계속합니다.XML을 모든 모호한 모델없이 비 직렬화

이제 여기에 있습니다. 이름 공간이나 XML의 다른 부분은 신경 쓰지 않습니다. deserialization이 "단순한 one-liner"로 작업하기를 원합니다. 나는 내 인생에서 많은 XML을 파싱 할 계획이며, 둘 다 중요하지 않은 세부 사항에 대해 비 대한 형식으로 싸우는 데 시간을 보내고 싶지 않습니다.

그래서 내가 모호한을 제거하고 단순히 <obj> <Name> ...을보고 해당 데이터를 public string Name { get; set; }에 넣는 XML 디시리얼라이저를 찾고 있습니다. 예를 들어 MyObj myObj = SimpleXml.Deserialize<MyObj>(xmlString);보다 어렵지 않아야합니다. JSON 디시 리얼 라이저와 거의 비슷합니다.

내가 설명한 것과 같은 사용하기 쉬운 XML 디시리얼라이저는 어디에서 찾을 수 있습니까?

이것이 XML 읽기 기능을 제한한다는 것을 알고 있습니다.

+1

질문하지 않습니다. 당신이 묻는 질문에 관해서는 : 당신은 쉽게 당신을 위해 참조하는 모든 껄끄 러운 네임 스페이스를 참조하는 확장 메서드를 작성할 수 있습니다. 그리고 나서 그것을 미래에 사용하십시오. – driis

+1

나는 무엇인가 찾고있다. 질문 양식에 있어야 할 필요가 있다면 "누구든지이 사실을 알고 있습니까?"라고 끝내는 것을 상상하십시오. 또는 "아무도 나를 도울 수 있습니까?" 또는 다른 모호한 확산과 아마도 잘못 표시된 질문이 일반적으로 추가 할 것입니다.:) –

+0

XmlSerializer.Deserialize가 실패 할 때 확장 메서드가 도움이되는 방식을 이해하지 못합니다. 나는 물론 내 자신의 XML 파서를 작성할 수 있지만 나는 다른 날을 위해 그것을 떠날 것이라고 생각했다. 내 질문의 요점은 .. 오류 ... 진술은 XML 데이터를 모델로 읽어들이는 저렴하고 쉬운 게으른 방법을 찾는 것입니다. –

답변

1

내 UI 클라이언트에 대해이 종류의 도우미를 사용하고 있습니다.

public string Serialize<T>(T o) 
{ 
    var x = new XDocument(); 
    using(var w = x.CreateWriter()) 
     new XmlSerializer(typeof(T)).Serialize(w, o); 
    return x.ToString(); 
} 

public T Deserialize<T>(string s) 
{ 
    return 
     (T)new XmlSerializer(typeof(T)) 
     .Deserialize(XDocument.Parse(s) 
     .CreateReader()); 
} 

당신이 Windows 서비스를 사용하는 경우주의가, 직렬화에서 알려진 메모리 누수가 : http://dotnetcodebox.blogspot.fr/2013/01/xmlserializer-class-may-result-in.html

이 문제를 방지하려면, 당신이 위에서 생성하는 방법으로 코드의 new XmlSerializer를 교체하는 것이 좋습니다/블로그 게시물에서 설명한대로 캐시 (예 : 사전)에서 XmlSerializers를 검색합니다.

+1

+1 메모리 누수가 있습니다. 이미 그것에 대해 알고 있었지만 인식해야 할 중요한 것입니다. –

1

xsd.exe를 사용하여 동일한 문제가 발생했습니다. 작동하도록 수정해야하는 거대한 autogenereted 파일을 갖고 싶지 않으며 해시 작업과 해시 작업을 함께 수행하는 데 시간을 보냈습니다. 네임 스페이스 중 하나입니다.

퍼지가없는 한 줄짜리 해결책을 찾으려면 xsd2code (http://xsd2code.codeplex.com/)을 시도해보십시오. 생성하기 전에 모든 설정을 가져올 수 있도록 클래스 생성에 대한 작은 안내서를 읽어야한다는 것을 알고 있어야합니다. 생성을 클릭 할 수는 없지만 최소한 나에게는 올바른 기본 설정이 없지만 바르게 달리는 바람이었다.

그래서 내가 그랬어 :

  1. 이 xsd.exe (XSD Hoorah.xml)와 XSD를 생성, xsd.exe의 그 부분은 괜찮습니다.
  2. 가 사용 xsd2code

    var hoorah = Hoorah.Deserialize(xml); 
    

에서 생성 된 클래스와 함께 제공되는 직렬화 방법은 그냥 작동 xsd2code (설치 및 참조 설명서) 클래스를 생성!

관련 문제