2009-10-15 4 views
6

그래서이 이와 유사한 구조를 가진 XML :C#을 일부 직렬화

<MyObject> 
    <PropertyA>Value</PropertyA> 
    <PropertyB>Value</PropertyB> 
    <PropertyC>Value</PropertyC> 
    <ArrayOfOtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
    </ArrayOfOtherObject> 
</MyObject> 

나는 ArrayOfOtherObject을 MyObject를 직렬화하지만 할 수있는 방법이 있나요를? 그리고 나중에 필요할 때마다 ArrayOfOtherObject의 게으른로드를 수행합니까?

일반적으로 XmlDeserialization을 사용하지만 AFAIK는 항상 모든 것을로드합니다.

감사합니다. 바이너리 직렬화 기능을 인식 당신은 특별한 생성자를 사용할 수 있습니다

+2

는, 솔직히 말해서, 및 역 직렬화 모든. –

+0

+1 좋은 질문입니다. Carlo – toddmo

답변

2
+0

'BinaryFormetter'가 아닙니까? xml은 대개 'IXmlSerializable'이며, * very * different로 보입니다. –

+0

예, Mark, 맞습니다. 그러나 IXmlSerializable은 ReadXml 메서드를 통해 쉽게 확장 될 수 있습니다. –

+1

그럼 어떻게할까요? 나는이 작업을 정말로 골똘히 생각하고있다. 왜냐하면 나는 정규 deserialization (전체 객체 비 직렬화)을 수행하고 XmlIgnore 만 사용했기 때문이다. 나는 이것을 사용하는 방법을 MSDN에서 찾았지만 다소 복잡하고 일을 할 수 없었습니다. (때로는 지나치게 복잡한 예제로 MSDN을 싫어합니다.) – Carlo

0

당신이 XML을 역 직렬화에 대해 얘기하는

XML의 경우
protected MyObject(SerializationInfo info, StreamingContext context) 
{ 
//here some elements you can load right now, and some other to store in so-to-say string in order to load later 
} 

여기에 사용자 정의 직렬화의 예입니다 전체 XML 파일을 메모리에로드 할 필요가 없도록 또는 콘크리트 객체에 액세스하려고 할 때 deserialize 할 필요가 없도록 구문 분석됩니다.

그것은 DOM 반대로 SAX의 구현을보고 도움이 될 수 있습니다 : 데이터 볼륨을 사용하면 간단한 방법가는 더 나을 것입니다 거대한하지 않는 한

http://www.saxproject.org/

+0

ArrayOfOtherObject가 아닌 MyObject를 deserialize해야합니다. 나중에 사용자가 요청하면 ArrayOfOtherObject를로드해야하지만 처음에는 MyObject 만로드해야합니다. – Carlo

+0

또 다른 생각은 RDBMS가 필요한 방식으로이 데이터를 저장하고 검색하는 데 더 적합하다는 것입니다. 이 데이터를 관계형 데이터베이스로 가져온 다음 예를 들어 LINQ to SQL을 사용하여 쿼리 할 수 ​​있습니다 (리콜 할 때 지연로드를 사용함). – PabloC

관련 문제