Я имею Единственный Файл И должен сериализировать несколько объектов случайным образом. Как может я в c#?

Таким образом, я нашел проблему, которая была в два раза.

Первый был при создании Discovery для BulkWalk, он должен быть следующим:

Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetBulkRequestPdu);

Ключевой частью является получение SnmpType правильно (мой код выше SnmpType.GetRequestPdu и не SnmpType.Get Bulk RequestPdu). В учебнике не упоминается, что SnmpType отличается.

Во-вторых, при передаче параметров в метод Messenger.BulkWalk () я передавал имя сообщества, а не имя пользователя. Замечания по исходному коду для метода BulkWalk действительно говорят имя сообщества, но это должен быть пользователь.

Я сделал, как предложил Лекс Ли, и выполнил / проверил образец snmpwalk, чтобы убедиться в отсутствии проблем. После этого я вернулся и просмотрел исходный код этого примера и обнаружил две проблемы.

6
задан Preet Sangha 3 April 2011 в 21:54
поделиться

3 ответа

What serialization mechanism are you using? XmlSerializer might be a problem because of the root node and things like namespace declarations, which are a bit tricky to get shot of - plus it isn't great at partial deserializations. BinaryFormatter is very brittle to begin with - I don't recommend it in most cases.

One option might be protobuf-net; this is a binary serializer (using Google's "protocol buffers" format - efficient, portable, and version-tolerant). You can serialize multiple objects to a stream with Serializer.SerializeWithLengthPrefix. To deserialize the same items, Serializer.DeserializeItems returns an IEnumerable of the deserialized items - or you could easily make TryDeserializeWithLengthPrefix public (it is currently private, but the source is available).

Just write each object to file after you have created it - job done.

If you want an example, please say - although the unit tests here give an overview.

It would basically be something like (untested):

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
    }
}
7
ответ дан 17 December 2019 в 00:14
поделиться

См. Ответ здесь .

Короче, просто сериализовать все в один и тот же файловый поток, а затем десериализовать. dotNet будет знать размер каждого объекта

0
ответ дан 17 December 2019 в 00:14
поделиться

For every object that arrives, we will convert it into a Base64Encoded string and store it as one line in a text file. So, in this file, every row will have a serialized object per line. While reading we will read the file one line at a time and deserialize this Base64 encoded string into our Object. Easy.. so lets try out the code.

http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print

0
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: