Не могли бы вы объяснить, почему следующий фрагмент кода не работает?Реализация ICloneable с protobuf-net
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 и пустая строка как значения соответствующих свойств.
Обновление: Если я сериализую в двоичный файл и затем открываю, если для чтения создается таким образом новый поток , код работает. Есть ли возможность избежать промежуточных двоичных файлов и использовать только один поток для сериализации и десериализации?