2009-10-15 27 views
6

Vì vậy, tôi có một xml có cấu trúc tương tự như sau:C# phần deserialization

<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> 

Có cách nào mà tôi có thể deserialize MyObject nhưng không phải là ArrayOfOtherObject? Và sau đó làm một tải chậm của ArrayOfOtherObject khi cần thiết?

Tôi thường sử dụng XmlDeserialization, nhưng AFAIK nó luôn tải toàn bộ.

Cảm ơn!

+2

Thành thật mà nói, trừ khi khối lượng dữ liệu là rất lớn bạn sẽ khấm khá hơn sẽ cho cách tiếp cận đơn giản nhất, và deserialize tất cả. –

+0

+1 câu hỏi tốt Carlo – toddmo

Trả lời

2

Bạn có thể sử dụng constructor đặc biệt mà được công nhận bởi chức năng deserialization nhị phân:

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 
} 

Trong trường hợp của XML - đây là một ví dụ về serialization tùy chỉnh: http://geekswithblogs.net/marcel/archive/2006/05/19/78989.aspx

+0

Đó không phải là 'BinaryFormetter'? xml thường là 'IXmlSerializable', trông * rất * khác nhau. –

+0

Có, Mark, bạn nói đúng nhưng IXmlSerializable cũng có thể dễ dàng được mở rộng thông qua phương pháp ReadXml. –

+1

Vì vậy, làm thế nào tôi sẽ đi về điều này? Tôi thực sự noob với điều này, vì tôi đã chỉ thực hiện deserialization thường xuyên (deserialize toàn bộ đối tượng) và chỉ được sử dụng XmlIgnore. Tôi tìm kiếm trên MSDN làm thế nào để sử dụng này, nhưng nó đã được khá phức tạp và không thể nhận được để làm việc (đôi khi tôi ghét MSDN cho các ví dụ quá phức tạp của họ). – Carlo

0

Bạn đang nói về deserializing xml vì nó được phân tích cú pháp sao cho bạn không phải tải toàn bộ tệp xml vào bộ nhớ hoặc deserializing nó khi bạn cố gắng truy cập vào đối tượng cụ thể?

Nó có thể giúp đỡ để nhìn vào một thực hiện SAX như trái ngược với DOM:

http://www.saxproject.org/

+0

Tôi cần phải deserialize MyObject nhưng không phải là ArrayOfOtherObject. Và sau đó nếu được yêu cầu bởi người dùng, tôi sẽ cần phải nạp ArrayOfOtherObject, nhưng ban đầu chỉ có MyObject. – Carlo

+0

Một ý nghĩ khác là RDBMS sẽ phù hợp hơn để lưu trữ và truy xuất dữ liệu này theo cách bạn yêu cầu. Bạn có thể nhập dữ liệu này vào cơ sở dữ liệu quan hệ và sau đó truy vấn nó bằng cách sử dụng LINQ to SQL ví dụ (sử dụng tải chậm khi tôi nhớ lại). – PabloC

Các vấn đề liên quan