首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用protobuf网实现ICloneable

用protobuf网实现ICloneable
EN

Stack Overflow用户
提问于 2014-01-04 06:59:38
回答 2查看 89关注 0票数 0

请您解释一下为什么下面的代码不能工作吗?

代码语言:javascript
复制
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();
    }

哪里

代码语言:javascript
复制
[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:如果我序列化成一个二进制文件,然后打开If进行读取,从而创建一个新的流,那么代码可以工作。是否有可能避免中间二进制文件,并且只使用一个流进行序列化和反序列化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-04 14:56:27

Thr问题是流的位置需要重置为零。

作为一种替代办法:

代码语言:javascript
复制
return Serializer.DeepClone(this);
票数 0
EN

Stack Overflow用户

发布于 2014-01-04 09:39:33

找出问题,忘记重新设置内存流的位置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20918048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档