【发布时间】:2016-04-06 16:26:03
【问题描述】:
我想跨多个序列化对象块跟踪对象引用。我知道的序列化器可以跟踪引用,但只能一次序列化一个图作为一个整体。我想部分序列化一个图,然后再序列化它的另一部分或从图中更新一些对象。
我认为下面的代码很好地解释了我的问题 - 我正在寻找一个序列化程序,如果在这里使用它会打印“成功”。
[Serializable]
class TestClass
{
public string Identifier;
public TestClass Reference;
}
class Program
{
static void Main(string[] args)
{
//some test data
TestClass t1 = new TestClass();
t1.Identifier = "t1";
TestClass t2 = new TestClass();
t2.Reference = t1;
t2.Identifier = "t2";
BinaryFormatter formatter = new BinaryFormatter(); //replace this with something that works ^^
MemoryStream stream = new MemoryStream(1024);
formatter.Serialize(stream, t1);
//possibly do lots of things inbetween these two, including,
//but not limited to, switching streams, writing other things
//on the stream etc.
formatter.Serialize(stream, t2);
stream.Position = 0;
object copy1 = formatter.Deserialize(stream);
object copy2 = formatter.Deserialize(stream);
if (((TestClass)copy2).Reference == copy1)
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Failure");
}
Console.ReadLine();
}
}
我的用例本质上是我想通过网络发送对象并保持引用完好无损。我研究了 protobuf-net 并围绕这个问题编写了一些解决方法,但它们在复杂性方面已经失控。我的问题是:是否有一个(好的)序列化库允许我在一次反序列化方法调用中跟踪引用?还是我错过了一些简单的技术来使用现有的序列化程序来归档它?还是我必须自己写这样的东西?
编辑: 澄清:这是一个游戏的网络,所以速度和紧凑性是一个问题。这意味着 XML/JSON 序列化器是一个相当糟糕的选择。
【问题讨论】:
标签: c# .net serialization