Как легко войти в словарь аргументов и сериализовать в JSON, используя Trace в C # - PullRequest
2 голосов
/ 16 июля 2010

Мне нужен гибкий способ регистрировать пары значений ключей с помощью System.Diagnostics.Trace.

По сути, когда мне нужно что-то записать в код, я хотел бы сделать вызов метода, который передает сообщение исловарь значений.Очевидно, это не сложно, но я хочу, чтобы он был чистым и, если это возможно, приводил в исполнение имена ключей, которые разрешены.Это потому, что я хочу иметь возможность позже проанализировать значения пары ключей и создать средство просмотра журнала, которое позволит вам искать и сортировать по аргументам, которые были записаны в журнал.

Один из способов, с которыми я экспериментировал, заключался в использовании нового.Net 4 необязательные параметры метода.

public static void LogInformation(string message, int? someID = null, string someValue = null, int? anotherID = null, int? andAnotherID = null)

Затем я мог бы назвать это следующим образом:

Logger.LogInformation("themessage", someID:5, andAnotherID:2);

Этот метод затем проверял бы каждый параметр, и ЕСЛИ он имел значение, ТОГДА он добавил быэто во встроенный словарь с использованием согласованных имен ключей.Затем я бы сериализовал словарь в JSON и передал его методу Trace.LogInformation в качестве сообщения.Но это кажется слишком сложным для поддержания.Мне пришлось бы продолжать добавлять новые строки в этот метод, так как наша кодовая база росла, и нужно было записывать новые значения.

Я также пытался отказаться от идеи блокировки имен ключей и просто пытатьсянайти простой способ передачи значений пар ключей в метод журнала без необходимости:

LogInformation("themessage", new Dictionary<string,string>(){{"someID","1"},{"andAnotherID","2"}});

Я попытался перейти по маршруту анонимного и динамического типа, чтобы разработчик мог вызвать метод следующим образом:

LogInformation("themessage", new { someID = 1, andAnotherID = 2 });

Но вы не можете использовать стандартные библиотеки сериализации, чтобы превратить этот анонимный или динамический объект в JSON.

Есть ли другие варианты или идеи, которые мне следует изучить?Очевидно, мне нужно учитывать производительность, так как этот метод будет вызываться повсюду.

1 Ответ

1 голос
/ 16 июля 2010

На самом деле вы можете сериализовать анонимный объект в JSON, используя JavaScriptSerializer

JavaScriptSerializer serializer = new JavaScriptSerializer();
var output = serializer.Serialize(your_anon_object);

см. Эту тему:

Как сериализовать анонимный тип C # в строку JSON?

И если вы хотите применить определенные «ключи», есть ли причина, по которой вы не хотите просто использовать строго типизированный класс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...