正如标题所说,我试图将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#编写代码,而且我仍然坚持将此功能添加到现有代码中。
答案 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'未标记为可序列化。'