.NET — Строка заканчивается сериализацией

#c# #asp.net-core #.net-core

Вопрос:

можно ли установить формат конца строки (rn vs n) для сериализации независимо от операционной системы? Чтобы в WIN и в Linux результат выполнения команды был одинаковым?

Я имею в виду, что в результате

System.Text.Json.JsonSerializer.Serialize(data, new JsonSerializerOptions {WriteIndented = true});

или

Newtonsoft.Json.JsonConvert.SerializeObject(data, Formatting.Indented);

будет в обеих системах:


{rn
"a": "b"rn
..
}

Большое спасибо. Том

Комментарии:

1. Что действительно заставляет меня задуматься, с каким сумасшедшим синтаксическим анализатором вы работаете, что на другом конце, которому вообще не все равно?!

2. У меня просто есть небольшой инструмент, который сериализует некоторые данные в json. Но иногда я запускаю инструмент в win, а иногда в ubuntu; и мне нужно сравнить результаты. Когда концы строк различаются, результаты никогда не бывают одинаковыми, даже если содержимое одно и то же.

3. Похоже, вам нужен лучший инструмент для различий! Мой голос выходит за рамки сравнения. Наивного подхода Newtonsoft.Json.JsonConvert.SerializeObject(data, Formatting.Indented).Replace("rn","n") может быть достаточно, если это нечасто выполняется

Ответ №1:

Ничего встроенного, но вы можете сериализовать в a MemoryStream вместо прямого файла, переместить в начало потока, открыть StreamReader над ним, а затем вручную записать строку за строкой (прочитать из StreamReader ) в открытый файл в двоичном режиме, введя любые окончания строк, которые вы хотите.

Если вы правильно используете Span<> срезы вместо Substring этого , это на самом деле так же эффективно, как и исходный вызов.