#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
этого , это на самом деле так же эффективно, как и исходный вызов.