/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/csharp/lab-16-004/main.cs
62 строки
2 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
using Система.Text; using Система.Text.Json; public static class DynamicJsonToCsv { public static string Convert(string json) { using var doc = JsonDocument.Parse(json); if (doc.RootElement.ValueKind != JsonValueKind.Array) throw new ArgumentException("Корневой элемент должен быть массивом."); var csv = new StringBuilder(); bool headerWritten = false; foreach (var item in doc.RootElement.EnumerateArray()) { if (item.ValueKind != JsonValueKind.Object) continue; if (!headerWritten) { var headers = string.Join(",", GetPropertyNames(item)); csv.AppendLine(headers); headerWritten = true; } var values = GetPropertyValues(item); csv.AppendLine(string.Join(",", values.Select(EscapeCsvField))); } return csv.ToString(); } private static IEnumerable<string> GetPropertyNames(JsonElement obj) { foreach (var prop in obj.EnumerateObject()) yield return prop.Name; } private static IEnumerable<string> GetPropertyValues(JsonElement obj) { foreach (var prop in obj.EnumerateObject()) { yield return prop.Value.ValueKind switch { JsonValueKind.String => prop.Value.GetString() ?? "", JsonValueKind.Number => prop.Value.GetDecimalToString JsonValueKind.True => "true", JsonValueKind.False => "false", JsonValueKind.Null => "", _ => prop.Value.ToString() }; } } private static string EscapeCsvField(string field) { if (field.Contains(',') || field.Contains('"') || field.Contains('\n')) return $"\"{field.Replace("\"", "\"\"")}\""; return field; } }