I m试图用C#的代用代用法取代现有序列器,用马克·科斯塔尔取代。 我的法典内容广泛,我的目标是能够在变化最小的情况下完成这一转变。
我在谈到一个问题时认为,它为什么会发生,但需要帮助克服——特别是需要尽可能少地改变我现有的法典和类别的解决办法。 我的守则是复杂的,因此我创建了以下简短的样本,以表明问题:
using System;
using System.Collections.Generic;
using System.IO;
using ProtoBuf;
namespace ConsoleApplication1
{
class program_issue
{
[ProtoContract]
public class Father
{
public Father()
{
sonny = new Son();
}
[ProtoMember(101)]
public string Name;
[ProtoMember(102)]
public Son sonny;
}
[ProtoContract]
public class Son
{
public Son()
{
Dict.Add(10, "ten");
}
[ProtoMember(103)]
public Dictionary<int, string> Dict = new Dictionary<int, string>();
}
static void Main(string[] args)
{
Father f1 = new Father();
f1.Name = "Hello";
byte[] bts = PBSerializer.Serialize(typeof(Father), f1);
Father f2;
PBSerializer.Deserialize(bts, out f2);
}
public static class PBSerializer
{
public static byte[] Serialize(Type objType, object obj)
{
MemoryStream stream = new MemoryStream();
ProtoBuf.Serializer.Serialize(stream, obj);
string s = Convert.ToBase64String(stream.ToArray());
byte[] bytes = stream.ToArray();
return bytes;
}
public static void Deserialize(byte[] data, out Father obj)
{
using (MemoryStream stream = new MemoryStream(data))
{
obj = ProtoBuf.Serializer.Deserialize<Father>(stream);
}
}
}
}
}
简言之,当母物体创建时,它就产生了一个带有某些价值的dict子。 我假定,当Protobuf试图重建该物体时,它使用同样的构造者(也用价值发动独裁者),然后试图将同样的价值再次推向帝国——和错误的一部分。
How can I overcome it with minimal changes to my code?
Kind regards, Yossi.