Tôi có một tệp và cần phải tuần tự hóa nhiều đối tượng của cùng một lớp khi một đối tượng mới được tạo. Tôi không thể lưu trữ chúng trong mảng như tôi cần serialize chúng dụ một đối tượng được tạo ra. Làm ơn giúp tôi.Tôi có một Tệp Đơn và cần phải tuần tự hóa nhiều đối tượng một cách ngẫu nhiên. Làm thế nào tôi có thể trong C#?
Trả lời
Xem câu trả lời here.
Tóm lại, chỉ cần tuần tự hóa mọi thứ vào cùng một luồng tệp và sau đó deserialize. dotNet sẽ biết kích thước của từng đối tượng
Bạn đang sử dụng cơ chế tuần tự nào? XmlSerializer
có thể là một vấn đề vì nút gốc và những thứ như khai báo không gian tên, có một chút khó khăn để có được shot - cộng với nó không phải là tuyệt vời tại deserializations một phần. BinaryFormatter
rất dễ bắt đầu - Tôi không khuyên bạn nên sử dụng nó trong hầu hết các trường hợp.
Một tùy chọn có thể là protobuf-net; đây là bộ nối tiếp nhị phân (sử dụng định dạng "bộ đệm giao thức" của Google - hiệu quả, di động và khả năng chịu phiên bản). Bạn có thể tuần tự hóa nhiều đối tượng vào luồng với Serializer.SerializeWithLengthPrefix
. Để deserialize các mục tương tự, Serializer.DeserializeItems
trả về một IEnumerable<T>
của các mục được deserialized - hoặc bạn có thể dễ dàng thực hiện TryDeserializeWithLengthPrefix
công khai (hiện tại là riêng tư, nhưng nguồn có sẵn).
Chỉ cần viết từng đối tượng vào tệp sau khi bạn đã tạo - hoàn thành công việc.
Nếu bạn muốn có ví dụ, vui lòng nói - mặc dù đơn vị kiểm tra here cung cấp tổng quan.
Nó sẽ về cơ bản là một cái gì tương tự (chưa được kiểm tra):
using(Stream s = File.Create(path))
{
Serializer.SerializeWithLengthPrefix(s, command1, PrefixStyle.Base128, 0);
... your code etc
Serializer.SerializeWithLengthPrefix(s, commandN, PrefixStyle.Base128, 0);
}
...
using(Stream s = File.OpenRead(path)) {
foreach(Command command in
Serializer.DeserializeItems<Command>(s, PrefixStyle.Base128, 0))
{
... do something with command
}
}
Tôi biết tôi đến trễ cho bữa tiệc nhưng bạn có nghĩ đến việc xây dựng trên * 'BinaryFormatter rất dễ bắt đầu - Tôi không khuyên bạn nên dùng nó trong hầu hết các trường hợp. '* Tại sao nó lại giòn? Tại sao bạn không giới thiệu nó? Đã một lúc kể từ khi câu trả lời này có thể bạn có thể giới thiệu một cách khác để tuần tự hóa nhiều đối tượng thành một tệp/nhiều tệp? –
@mehow chắc chắn: BinaryFormatter là phiên bản rất không dung nạp/tái cấu trúc: rất dễ làm cho nó không thể deserialize các tập tin hiện có khi thay đổi ... tốt, bất cứ điều gì thẳng thắn. Nó cũng là các tùy chọn hạn chế và khung nền tảng và nền tảng. Nó cũng là không cần thiết cồng kềnh và không hiệu quả, và có một số "gotchas". Đối với câu hỏi khác của bạn: tôi là một thiên vị, nhưng tôi sẽ nói rằng protobuf-net địa chỉ tất cả những điều này. Đó là, sau khi tất cả, mục tiêu thiết kế :) protobuf-net là hoàn toàn hài lòng với nhiều đối tượng trong một dòng, miễn là các phương pháp * WithLengthPrefix được sử dụng. –
Cảm ơn bạn Tôi đánh giá cao nó –
Đối với mỗi đối tượng mà đến, chúng tôi sẽ chuyển đổi nó thành một chuỗi Base64Encoded và lưu nó như một dòng trong một file văn bản. Vì vậy, trong tệp này, mỗi hàng sẽ có một đối tượng được tuần tự trên mỗi dòng. Trong khi đọc chúng ta sẽ đọc từng dòng một tập tin và deserialize chuỗi mã hóa Base64 này vào đối tượng của chúng ta. Dễ dàng .. vì vậy hãy thử mã.
http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print
- 1. Làm thế nào tôi có thể làm cho DataContractJsonSerializer tuần tự hóa một đối tượng dưới dạng chuỗi?
- 2. Làm thế nào tôi có thể tuần tự hóa đối tượng động vào JSON trong hành động C# MVC Controller?
- 3. Làm cách nào để tuần tự hóa một đối tượng đơn giản trong sdk iPhone?
- 4. Làm thế nào tôi có thể tìm ra serialVersionUID của một đối tượng Java được tuần tự hóa?
- 5. Làm thế nào tôi có thể tuần tự hóa một đối tượng bằng thuộc tính Dictionary <string, object>?
- 6. Làm thế nào tôi có thể tuần tự hóa một đóng cửa trong Perl?
- 7. Làm thế nào để kiểm tra xem một đối tượng có thể tuần tự hóa trong C#
- 8. Sử dụng AngularJS làm cách nào tôi có thể ngẫu nhiên hóa thứ tự của một bộ sưu tập?
- 9. Làm cách nào để tuần tự hóa một đối tượng và lưu nó vào một tệp trong Android?
- 10. Làm thế nào tôi có thể trả lại một giá trị ngẫu nhiên từ một mảng?
- 11. Tôi cần một khung tuần tự hóa cho D
- 12. Làm cách nào để tuần tự hóa một đối tượng có giao diện là thuộc tính?
- 13. Làm thế nào để tuần tự hóa một gói?
- 14. Làm thế nào tôi có thể tuần tự hóa thiết kế báo cáo DevExpress XtraReport
- 15. Biểu đồ đối tượng là gì và làm cách nào để tuần tự hóa một số
- 16. Làm thế nào tôi có thể nhận được chính xác n dòng ngẫu nhiên từ một tệp với Perl?
- 17. Làm thế nào để lấy một đối tượng ngẫu nhiên từ một cá thể NSSet?
- 18. Tôi có thể lấy n phần tử ngẫu nhiên từ một mảng Perl như thế nào?
- 19. làm thế nào tôi có thể kiểm tra nếu một đối tượng tồn tại trong C++
- 20. Làm thế nào tôi có thể tự động gọi một hàm tạo trong C#?
- 21. Làm thế nào tôi có thể đọc một chuỗi ký tự có dấu cách trong C?
- 22. Làm cách nào để tuần tự hóa một đối tượng thành một XDocument?
- 23. Làm thế nào tôi có thể tuần tự hóa - deserialize một băm để lưu nó trong cơ sở dữ liệu?
- 24. Làm thế nào để thay đổi một đối tượng được tuần tự hóa?
- 25. Làm thế nào tôi có thể nhận được kích thước của một đối tượng trong HttpRuntime.Cache?
- 26. Làm thế nào để tuần tự hóa một mảng đối tượng jQuery cho JSON Post?
- 27. Làm thế nào tôi có thể đảm bảo rằng tôi vứt bỏ một đối tượng trong đơn của tôi trước khi đơn đăng ký đóng?
- 28. Làm thế nào tôi có thể kiểm tra một đối tượng bên trong một phương thức trong Objective-C?
- 29. Bạn có thể tạo một đối tượng có thể tuần tự hóa trong thời gian chạy không?
- 30. Tôi có thể tuần tự hóa ExpandoObject trong .NET 4 không?
Bạn có ý nghĩa gì với ngẫu nhiên? –
Tôi nghĩ bạn cần phải làm rõ tiếng Anh của bạn. –
Bạn có lưu các đối tượng vào "tệp đơn" đó và truy xuất chúng trở lại từ nó không? Khi bạn nói rằng bạn muốn "serialize" các đối tượng ngay sau khi chúng được tạo ra, bạn có nghĩa là bạn muốn lưu chúng vào tập tin đó? – DOK