0

次のコードが機能しない理由を教えてください。

static void Main(string[] args)
    {
        var simpleObject = new SimpleObjectDTO { Id = 1, Name = "Jacob" };
        const string format = "{2} object properties are: Id {0} Name {1}";
        Console.WriteLine(format, simpleObject.Id, simpleObject.Name, "Original");
        var clone = simpleObject.Clone() as SimpleObjectDTO;
        // ReSharper disable PossibleNullReferenceException
        Console.WriteLine(format, clone.Id, clone.Name, "Clone");
        // ReSharper restore PossibleNullReferenceException
        Console.ReadLine();
    }

どこ

[ProtoContract]
public class SimpleObjectDTO  : ICloneable
{
    [ProtoMember(1)]
    public int Id { get; set; }
    [ProtoMember(2)]
    public string Name { get; set; }

    public object Clone()
    {
        using (var stream = new MemoryStream())
        {
            Serializer.Serialize(stream, this);
            stream.Flush();
            var clone = Serializer.Deserialize<SimpleObjectDTO>(stream);
            return clone;
        }            
    }
}

コードは正常に実行されますが、逆シリアル化されたオブジェクトには、適切なプロパティの値として 0 と空の文字列があります。

Upd .:バイナリファイルにシリアル化してから、読み取り用に開いて新しいストリームを作成すると、コードが機能します。中間バイナリ ファイルを回避し、シリアライズとデシリアライズの両方に 1 つのストリームのみを使用する可能性はありますか?

4

2 に答える 2