C#:如何序列化/反序列化EventBookmark类的对象

C#:如何序列化/反序列化EventBookmark类的对象,c#,serialization,C#,Serialization,我使用EventLogWatcher跟踪日志中的事件。程序停止/启动后,我需要保存/恢复书签事件。事件书签由EventBookmark类表示,它继承自ISerializable接口。但我无法序列化该类的对象。因为它没有默认的ctor,ctor没有参数。 我对C#不太熟悉,因为我在一周内使用它。您能帮助我理解为什么这个类继承自ISerializable接口,而我不能序列化那个类的对象吗?这对我来说很奇怪,好像我不明白什么,但我想知道。 此外,承包商 EventBookmark(Serializat

我使用EventLogWatcher跟踪日志中的事件。程序停止/启动后,我需要保存/恢复书签事件。事件书签由EventBookmark类表示,它继承自ISerializable接口。但我无法序列化该类的对象。因为它没有默认的ctor,ctor没有参数。 我对C#不太熟悉,因为我在一周内使用它。您能帮助我理解为什么这个类继承自ISerializable接口,而我不能序列化那个类的对象吗?这对我来说很奇怪,好像我不明白什么,但我想知道。 此外,承包商 EventBookmark(SerializationInfo,StreamingContext)GetObjectData(SerializationInfo,StreamingContext)受到保护

那么,如何序列化和反序列化EventBookmark类的对象呢

已更新(工作代码),感谢jdweng的帮助

namespace ConsoleApp
{
    using System;

    public class Program
    {
        static void Main(string[] args)
        {
            string logName = "Application";
            string filter = "*";
            System.Diagnostics.Eventing.Reader.EventLogQuery eventQuery = new System.Diagnostics.Eventing.Reader.EventLogQuery(
                logName,
                System.Diagnostics.Eventing.Reader.PathType.LogName,
                filter
            );
            System.Diagnostics.Eventing.Reader.EventLogReader eventLogReader = new System.Diagnostics.Eventing.Reader.EventLogReader(eventQuery);
            System.Diagnostics.Eventing.Reader.EventRecord eventRecord = eventLogReader.ReadEvent();
            System.Diagnostics.Eventing.Reader.EventBookmark eventBookmark = eventRecord.Bookmark;
            if (eventBookmark != null)
            {
                System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                System.IO.Stream stream = new System.IO.MemoryStream();
                formatter.Serialize(stream, eventBookmark);
                stream.Position = 0;
                System.IO.StreamReader reader = new System.IO.StreamReader(stream);
                string result = reader.ReadToEnd();
                Console.WriteLine("event bookmark: {0}", result);
                stream.Position = 0;
                System.Diagnostics.Eventing.Reader.EventBookmark newEventBookmark = (System.Diagnostics.Eventing.Reader.EventBookmark)formatter.Deserialize(stream);
                if (newEventBookmark != null/* && eventBookmark.Equals(newEventBookmark)*/)
                {
                    Console.WriteLine("Deserialization successfully passed");
                }
                else
                {
                    Console.WriteLine("Deserialization failed");
                }
            }
            else
            {
                Console.WriteLine("cannot read event bookmark");
            }
            Console.ReadKey();
        }
    }
}



你们看到下面的样品了吗?之前我没有读过。但现在它帮助我在更新的标题下编写上面的代码。非常感谢。顺便问一下,在我的示例中,为什么这段代码不起作用eventBookmark.Equals(newEventBookmark)?我认为它不起作用,因为您正在比较两个类(而不是类的内容)。因此,如果在比较两个类时数据完全相同,则对象的地址不同且不进行比较。EventBookmark类是否继承IEquals?类是否有等于的方法?EventBookmark类不继承IEquals,但它有等于,因为编译已成功通过。和eventBookmark.Equals(newEventBookmark)返回false。所以很可能你当时是对的。非常感谢。