DrawingBrushを含むBL構造をシリアル化する必要があります。次のように私はそれを書き換えました:protobuf-netの問題でWPF DrawingBrushをシリアライズ
[ProtoContract]
public class BaseProtoBuf : INotifyPropertyChanged, IFormattable
{
[ProtoMember(1)]
public string ID { get; set; }
// Bunch of properties of .net primitive types
// ..
private DrawingBrush _geometry;
[ProtoMember(9)]
[Browsable(false)]
public DrawingBrush Geometry
{
get { return _geometry; }
set
{
_geometry = value;
ScaleDrawing();
}
}
}
[ProtoContract]
[ProtoInclude(1, typeof(string))]
// All other includes
[ProtoInclude(9, typeof(DrawingBrush)]
public class DerivedProtoBuf : BaseProtoBuf, ICloneable
{
// Some additional properties of primitive types, annotated starting with ProtoMember 10 and so on
}
私は次のコードを実行していシリアライズするには:
const string fileName = "Protobuf.bin";
using (var file = File.Create(fileName))
{
file.Position = 0;
var testBase = new BaseProtoBuf
{
Height = 100,
Width = 100,
Name = "Test 1",
OffsetX = 200,
OffsetY = 200,
Geometry = sourceList[0].Geometry // some not-null DrawingBrush
};
Serializer.Serialize(file, testBase);
file.Position = 0;
var restored = Serializer.Deserialize<BaseProtoBuf>>(file);
}
}
を私は、派生クラスのオブジェクトをシリアル化する必要がありますが、基本シリアル化中に、私は「いいえ、適切なデフォルトをを取得していませんDrawingBrushエンコーディングが見つかりました "。 DrawingBrushはオブジェクトによってはnullになる可能性がありますが、テストではそうではありません。適切にシリアル化するための回避策1)非ヌルのBaseオブジェクトDrawingBrush 2)nullのDrawingBrushを持つ派生オブジェクト?前もって感謝します。
Eeshのように見える....「楽しい」; Pはうまくいっていた。マイナーフィードバック。 "varint"エンコーディングの仕組みのために、サブタイプ(300/200/100)のタグ番号を小さくすると、数バイトを節約できます。しかし、何も顎を落とすことはありません。 –