リスト内のポイント データを protobuf.net で作成されたバイナリ ファイルに保存しようとしています。これ自体に問題はありませんが、テキストエディターで簡単に表示できる形式でデータを保存しようとしています。デフォルトでは、List of Point 構造体をテキスト ファイルに保存すると、各ポイントの x と y が ASCII テキストとして表示されます。
[global::ProtoBuf.ProtoMember(1, IsRequired = false, Name = @"BufPoints", DataFormat = global::ProtoBuf.DataFormat.Default)]
private List<Point> BufPoints
{
get
{
return this.Points;
}
set
{
this.Points = value;
}
}
x と y の double データを保存する独自のクラスを作成しようとしましたが、ルーチンの一部にデータのディープ クローンが含まれており、このクローンを実行すると値が失われるようです。
[global::ProtoBuf.ProtoMember(1, IsRequired = false, Name = @"EncodedPoints", DataFormat = global::ProtoBuf.DataFormat.Default)]
private List<Utils.PointConverter> EncodedPoints
{
get
{
List<Utils.PointConverter> temp = new List<Utils.PointConverter>();
if (Points != null)
{
foreach (Point p in this.Points)
{
temp.Add(new Utils.PointConverter(p));
}
}
return temp;
}
set
{
if (value != null)
{
this.Points = new List<Point>();
foreach (Utils.PointConverter pc in value)
{
this.Points.Add(pc.GetPoint());
}
}
}
}
PointsConverter クラスは次のとおりです。
[global::System.Serializable, global::ProtoBuf.ProtoContract(Name = @"PointConverter")]
class PointConverter
{
[global::ProtoBuf.ProtoMember(1, IsRequired = true, Name = @"X", DataFormat = global::ProtoBuf.DataFormat.Default)]
public double X;
[global::ProtoBuf.ProtoMember(2, IsRequired = true, Name = @"Y", DataFormat = global::ProtoBuf.DataFormat.Default)]
public double Y;
public PointConverter(System.Windows.Point point)
{
this.X = point.X;
this.Y = point.Y;
}
public PointConverter()
{
}
public System.Windows.Point GetPoint()
{
return new System.Windows.Point(X, Y);
}
}
ディープクローン中に値が失われる理由がわかりません。ASCII 以外の形式で別の方法でデータを保存する方法や、ディープ クローンに関する問題に対処する方法はありますか?