При компиляции кода C# в .exe он компилируется в байт-код Общего промежуточного языка (CIL). Каждый раз, когда Вы выполняете исполняемый файл CIL, он выполняется на виртуальной машине Общеязыковой среды выполнения (CLR) Microsofts. Так не, не возможно включать скручивание жгутов VM Ваш исполняемый файл.NET. Необходимо было установить время выполнения.NET на любых клиентских машинах, куда программа будет работать.
Для ответа на второй вопрос.NET является платформой, в которой это - ряд библиотек, компиляторов и VM, который не является конкретным языком. Таким образом, можно кодировать на платформе.NET в C#, VB, C++ и любых других языках, которые имеют компилятор.NET.
https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages
вышеупомянутая страница имеет список языков, которые имеют версии.NET, а также ссылки на их страницы.
Казалось, что нет встроенного инструмента для форматирования вывода JSON-сериализатора.
Я полагаю, что причиной этого является минимизация данных, которые мы отправляем по сети.
Вы уверены, что вам нужны отформатированные данные в коде? Или вы хотите анализировать JSON только во время отладки?
Существует множество онлайн-сервисов, которые предоставляют такую функциональность: 1 , 2 . Или автономное приложение: JSON viewer .
Но если вам нужно форматирование внутри приложения, вы можете написать соответствующий код самостоятельно.
Вы можете использовать JSON.NET сериализатор, он поддерживает форматирование JSON
string body = JsonConvert.SerializeObject(message, Formatting.Indented);
Yon может загрузить этот пакет через NuGet.
Вот мое решение, которое не требует использования JSON.NET и проще, чем код, связанный Алексом Жевжиком.
using System.Web.Script.Serialization;
// add a reference to System.Web.Extensions
public void WriteToFile(string path)
{
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(this);
string json_pretty = JSON_PrettyPrinter.Process(json);
File.WriteAllText(path, json_pretty );
}
и вот форматер
class JSON_PrettyPrinter
{
public static string Process(string inputText)
{
bool escaped = false;
bool inquotes = false;
int column = 0;
int indentation = 0;
Stack<int> indentations = new Stack<int>();
int TABBING = 8;
StringBuilder sb = new StringBuilder();
foreach (char x in inputText)
{
sb.Append(x);
column++;
if (escaped)
{
escaped = false;
}
else
{
if (x == '\\')
{
escaped = true;
}
else if (x == '\"')
{
inquotes = !inquotes;
}
else if ( !inquotes)
{
if (x == ',')
{
// if we see a comma, go to next line, and indent to the same depth
sb.Append("\r\n");
column = 0;
for (int i = 0; i < indentation; i++)
{
sb.Append(" ");
column++;
}
} else if (x == '[' || x== '{') {
// if we open a bracket or brace, indent further (push on stack)
indentations.Push(indentation);
indentation = column;
}
else if (x == ']' || x == '}')
{
// if we close a bracket or brace, undo one level of indent (pop)
indentation = indentations.Pop();
}
else if (x == ':')
{
// if we see a colon, add spaces until we get to the next
// tab stop, but without using tab characters!
while ((column % TABBING) != 0)
{
sb.Append(' ');
column++;
}
}
}
}
}
return sb.ToString();
}
}
Я также хотел иметь возможность отформатировать JSON, не полагаясь на сторонний компонент. Решение Марка Лакаты работало хорошо (спасибо Марку), но я хотел, чтобы скобки и табуляция были такими же, как в ссылке Алекса Жевжика. Итак, вот измененная версия кода Марка, которая работает таким образом, на случай, если кто-то еще захочет:
/// <summary>
/// Adds indentation and line breaks to output of JavaScriptSerializer
/// </summary>
public static string FormatOutput(string jsonString)
{
var stringBuilder = new StringBuilder();
bool escaping = false;
bool inQuotes = false;
int indentation = 0;
foreach (char character in jsonString)
{
if (escaping)
{
escaping = false;
stringBuilder.Append(character);
}
else
{
if (character == '\\')
{
escaping = true;
stringBuilder.Append(character);
}
else if (character == '\"')
{
inQuotes = !inQuotes;
stringBuilder.Append(character);
}
else if (!inQuotes)
{
if (character == ',')
{
stringBuilder.Append(character);
stringBuilder.Append("\r\n");
stringBuilder.Append('\t', indentation);
}
else if (character == '[' || character == '{')
{
stringBuilder.Append(character);
stringBuilder.Append("\r\n");
stringBuilder.Append('\t', ++indentation);
}
else if (character == ']' || character == '}')
{
stringBuilder.Append("\r\n");
stringBuilder.Append('\t', --indentation);
stringBuilder.Append(character);
}
else if (character == ':')
{
stringBuilder.Append(character);
stringBuilder.Append('\t');
}
else
{
stringBuilder.Append(character);
}
}
else
{
stringBuilder.Append(character);
}
}
}
return stringBuilder.ToString();
}