C# 如何将用户定义的对象序列化到WriteEvent?
从MSDN文档中,Write事件仅支持int和string参数类型。我想通过一个用户创建的ct来写事件,如何获得这个功能?实现此功能的正确序列化程序是什么?在Windows 10(也后端口到Win7/8.1)中,从.Net 4.6开始就支持:C# 如何将用户定义的对象序列化到WriteEvent?,c#,etw,etw-eventsource,C#,Etw,Etw Eventsource,从MSDN文档中,Write事件仅支持int和string参数类型。我想通过一个用户创建的ct来写事件,如何获得这个功能?实现此功能的正确序列化程序是什么?在Windows 10(也后端口到Win7/8.1)中,从.Net 4.6开始就支持: // define a ‘plain old data’ class [EventData] class SimpleData { public string Name { get; set; } publ
// define a ‘plain old data’ class
[EventData]
class SimpleData {
public string Name { get; set; }
public int Address { get; set; }
}
[EventSource(Name = "Samples-EventSourceDemos-RuntimeDemo")]
public sealed class RuntimeDemoEventSource : EventSource
{
// define the singleton instance of the event source
public static RuntimeDemoEventSource Log = new RuntimeDemoEventSource();
// Rich payloads only work when the self-describing format
private RuntimeDemoEventSource() : base(EventSourceSettings.EtwSelfDescribingEventFormat) { }
// define a new event.
public void LogSimpleData(string message, SimpleData data) { WriteEvent(1, message, data); }
}
RuntimeDemoEventSource.Log.LogSimpleData(
"testMessage",
new SimpleData() { Name = "aName", Address = 234 });
阅读博客和文档了解更多详细信息。有几个选项:
- 按照magicandre1981的建议使用。除非您必须使用.NET4.5、4.0甚至3.5,否则这是更好的选择
- 在JSON或Bond等中手动序列化它们
- 手动创建
结构并传递给(必须在EventData
内部)-当前使用此方法safe
- 或者你可以举个例子。这是有道理的