Что касается использования Protobuf-Net в C # - PullRequest
2 голосов
/ 05 декабря 2011

Я начал использовать Protobuf-Net в проектах C # и WPF. У меня есть класс, который выглядит так:

Class Study - Содержит коллекцию клинических находок; каждый объект Clinical Finding содержит коллекцию объектов снимков экрана (экземпляры класса снимков экрана).

Когда я сериализирую объект исследования - клинические данные сериализуются правильно. Однако внутренняя коллекция объектов снимков экрана, содержащихся в каждом объекте клинической находки, НЕ сериализуется.

Это работает правильно с Binary Formatter. Можете ли вы просветить меня, пожалуйста?

Привет

1 Ответ

1 голос
/ 05 декабря 2011

Работает нормально здесь (см. Ниже). Я рад помочь, но вы можете добавить воспроизводимый пример, на который я могу взглянуть.

using System.Collections.Generic;
using System.Linq;
using ProtoBuf;
[ProtoContract]
class Study
{
    private readonly List<ClinicalFinding> findings
        = new List<ClinicalFinding>();
    [ProtoMember(1)]
    public List<ClinicalFinding> Findings { get { return findings; } } 
}
[ProtoContract]
class ClinicalFinding
{
    private readonly List<ScreenShot> screenShots = new List<ScreenShot>();
    [ProtoMember(1)]
    public List<ScreenShot> ScreenShots { get { return screenShots; } } 
}
[ProtoContract]
class ScreenShot
{
    [ProtoMember(1)]
    public byte[] Blob { get; set; }
}
static class Program
{
    static void Main()
    {
        var study = new Study {
            Findings = {
                new ClinicalFinding {
                    ScreenShots = {
                        new ScreenShot {Blob = new byte[] {0x01, 0x02}},
                        new ScreenShot {Blob = new byte[] {0x03, 0x04, 0x05}},
                    }
                },
                new ClinicalFinding {
                    ScreenShots = {
                        new ScreenShot {Blob = new byte[] {0x06, 0x07}},
                    }
                }
            }
        };
        // the following does a serialize/deserialize
        var clone = Serializer.DeepClone(study);

        int sum = clone.Findings.SelectMany(x => x.ScreenShots)
            .SelectMany(x => x.Blob).Sum(x => (int) x); // 28, as expected
    }
}
...