[英]Serialize a List<object> to byte[] - c#
正如標題所說,我正在嘗試將 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# 編寫代碼,而且我一直堅持將此功能添加到現有代碼中。
您需要使用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.EventErrorList'在程序集'q48506847,版本= 1.0.0.0,文化=中性,PublicKeyToken = null'未標記為可序列化。
在此處添加注釋,從 .NET 5.0 開始,由於潛在的安全漏洞,二進制序列化已被棄用。 有關詳細信息,請參閱https://aka.ms/binaryformatter 。
作為一種解決方法,請使用System.Text.Json.JsonSerializer
或 XML 序列化程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.