Сериализация ArrayList с использованием protobuf-Net v2 - PullRequest
1 голос
/ 25 ноября 2011

Я новичок в protobuf-net и только что установил v2r470, который будет использоваться. в моем приложении C # -WinForm. Я получаю "InvalidOperationException was unhandled" - "No serializer defined for type: System.Object" при сериализации ArrayList.

Сериализуемый класс:

[ProtoContract]
public class ProtoData
{
    [ProtoMember(1)]
    ArrayList list = new ArrayList();

    public ProtoData()
    {
        list.Clear();
        list.Add("Hello");
        list.Add("World");
    }
}

Сериализация:

        ProtoData pData = new ProtoData();
        var file = File.Create("protodata.bin");
        Serializer.Serialize<ProtoData>(file, pData);   // <<----- error

Чего здесь не хватает?

1 Ответ

1 голос
/ 25 ноября 2011

В большинстве случаев protobuf-net предпочитает однородные данные; в вашем случае вы, кажется, храните списки; если вы сделаете list a List<string>, тогда он будет просто работать .

protobuf (формат, в частности, не protobuf-net) разработан на основе ожидаемой и известной схемы; Вы не можете просто сказать «объект» - он хочет знать больше, чем это. Я, как protobuf-net, добавил различные настройки и поездки, чтобы сделать это достижимым, но наиболее подходящий подход будет зависеть от того, что точно ваша фактическая модель пытается сделать. Пока что он пытается сохранить 2 строки; List<string> является наиболее подходящим способом сделать это. Как я уже сказал, есть несколько других способов сделать подобные вещи с разнородными данными.

...