将List <object>序列化为byte [] - c#

时间:2018-01-29 17:30:46

标签: c# serialization

正如标题所说,我试图将List序列化为byte [],以便能够通过zeromq套接字发送它。

首先,我想要实现的是:从Windows事件日志中获取所有错误(来自某些来源)。然后,将其放入一个具有列表的对象中,然后将其序列化并通过zeromq套接字发送。

这是我用来存储我的信息的两个类

public class EventErrorList
{
    public int transmiter { get; set; }
    public List<EventEntry> events { get; set; }

}

public class EventEntry
{
    public string msg { get; set; }
    public string source { get; set; }
}

这是我处理错误的代码:

public static void Object(ref NetMQSocket response, string msgResponseCommand)

{

    try
    {
        EventLog myLog = new EventLog();
        myLog.Log = "Application";
        myLog.Source = "Application Error";
        var eventError = new EventErrorList();
        var listError = new List<EventEntry>();
        eventError.transmiter = ManagerDb.GetMachineId();


        for (int index = myLog.Entries.Count - 1; index > 0; index--)
        {
            var errLastEntry = myLog.Entries[index];
            if (errLastEntry.EntryType == EventLogEntryType.Error)
            {
                var appName = errLastEntry;

                if (errLastEntry.Source == ".NET Runtime" || errLastEntry.Source == "MSSQLSERVER" || errLastEntry.Source == "Service1")
                {
                    var entry = new EventEntry();

                    entry.msg = appName.Message;
                    entry.source = appName.Source;

                    listError.Add(entry);

                }

            }



        }
        eventError.events = listError;

        var binFormatter = new BinaryFormatter();
        var mStream = new MemoryStream();
        binFormatter.Serialize(mStream, eventError);

        response.SendFrame(mStream.ToArray());
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error");
        Console.WriteLine(ex.Message);
    }


    }

直到eventError.events = listError;,代码效果很好。但是,从那里开始,它无法正常工作。我从SO中的另一个线程获得了这种序列化方法,但在行binFormatter.Serialize(mStream, eventError);中它触发了try / catch,并跳转到异常中。

这是我得到的例外:

Exception thrown: 'System.Runtime.Serialization.SerializationException' in mscorlib.dll

对不起,如果这是一个显而易见的问题,但我并不是真的用c#编写代码,而且我仍然坚持将此功能添加到现有代码中。

1 个答案:

答案 0 :(得分:1)

您需要使用Serializable属性标记类:

[Serializable]
public class EventErrorList
{
    public int transmiter { get; set; }
    public List<EventEntry> events { get; set; }

}
[Serializable]
public class EventEntry
{
    public string msg { get; set; }
    public string source { get; set; }
}

为了将来参考,您还应阅读并发布错误消息:

  

在程序集'q48506847中输入'q48506847.EventErrorList',版本= 1.0.0.0,Culture =中性,PublicKeyToken = null'未标记为可序列化。'