首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将队列保存到文件,然后加载队列并与原始队列进行比较

将队列保存到文件,然后加载队列并与原始队列进行比较
EN

Stack Overflow用户
提问于 2013-05-23 18:50:14
回答 1查看 1.9K关注 0票数 1

我在将队列保存到文件中,然后将其加载到新队列中,然后将旧队列与新队列进行比较时遇到问题。

我有一个简单的TestMessageClass,现在我想序列化队列并将其保存到一个名为test.bin的文件中。我认为运行得很好,但当我将队列加载到另一个变量中并比较它们时,它会给出以下错误:

代码语言:javascript
复制
Expected: equivalent to 

Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass


But was:


Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass, 
Grid.NodeTests.MessageSink_Tests.MessageSinkTests+TestMessageClass

如果我将普通字符串放入队列,则一切正常,但如果我使用TestMessageClass,它将不再起作用。

代码语言:javascript
复制
[Serializable()]
class TestMessageClass
{
    public enum MessageType
    { 
        Broadcast,
        Unicast
    }
}

internal interface ISerializationService
{
      void Serialize(Stream outputStream, object obj);
      T Deserialize<T>(Stream inputStream);
}

public void Serialize(Stream outputStream, Object obj)
{

    IFormatter serializer = new BinaryFormatter();
    serializer.Serialize(outputStream, obj);


}

public T Deserialize<T>(Stream inputStream)
{

    var result = new BinaryFormatter().Deserialize(inputStream);

    return (T)result;

}
[Test]
public void CompareQueue()
{
    Queue queue1 = new Queue();

    var message = new TestMessageClass();

    for (int i = 0; i < 100; i++)
        queue1.Enqueue(message);

    ISerializationService service = new SerializationService();

    FileStream stream = File.Open("Test.bin" , FileMode.Create , FileAccess.Write);

    service.Serialize(stream, queue1);
    stream.Close();

    FileStream stream2 = File.Open("Test.bin" , FileMode.Open ,FileAccess.Read);

    Queue queue2 = service.Deserialize<Queue>(stream2);
    stream2.Close();
    CollectionAssert.AreEquivalent(queue1,queue2);

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-23 18:59:45

最简单的解决方案是在您的TestMessageClass上实现Equals,以确定两个不同的实例是否相等。通常,可以通过比较每个实例上的所有属性来实现该方法。

当您序列化它,然后反序列化它时,它将创建新的实例,因此默认的Equals实现将返回false,因为它只是比较实例是否相同。

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

https://stackoverflow.com/questions/16711998

复制
相关文章

相似问题

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