Я ищу способ разбить строку JSON на несколько строк после сериализации, вставляя новую строку после каждого свойства Nth.
Например, у меня есть этот класс:
public class Obj
{
public string Property1 { get; set; }
public string Property2 { get; set; }
public string[] Property3 { get; set; }
public string Property4 { get; set; }
public string Property5 { get; set; }
public string Property6 { get; set; }
public TimeSpan Time { get; set; }
public string Property7 { get; set; }
public string Property8 { get; set; }
public string Property9 { get; set; }
public string Property10 { get; set; }
public string[] Property11 { get; set; }
}
Инициализируется примерно так:
var root = new Obj
{
Property1 = "value1",
Property2 = "value2",
Property3 = new[] {"test", "test1", "test3"},
Property4 = "value4",
Property5 = "value5",
Property6 = "value6",
Time = TimeSpan.FromSeconds(13),
Property7 = "value7",
Property8 = "value8",
Property9 = "value9",
Property10 = "value10",
Property11 = new string[] {"asdf", "basdf"}
};
Когда я вызываю JsonConvert.SerializeObject(root)
, он печатает:
{"Property1":"value1","Property2":"value2","Property3":["test","test1","test3"],"Property4":"value4","Property5":"value5","Property6":"value6","Time":"00:00:13","Property7":"value7","Property8":"value8","Property9":"value9","Property10":"value10","Property11":["asdf","basdf"]}
Я хотел бы добавить новую строку один раз после каждого N-го свойства. Скажем, каждое третье свойство.
Я попробовал что-то вроде этого:
public static string ReplaceEveryNth(string fullString, string pattern, int n)
{
if (n < 1) { return fullString; }
var index = 1;
return Regex.Replace(fullString, pattern, m =>
{
return (index++ % n == 0) ? m.Value + Environment.NewLine : m.Value;
});
}
и назвал его так, чтобы соответствовать парам ключ-значение в строке JSON:
var replaced = ReplaceEveryNth(json, "(\".*?\":\".*?\"),", 3);
Теперь это работает для простых свойств. Но когда я начинаю вводить типы, такие как массивы, регулярное выражение становится более сложным.
Мне интересно, существует ли более простой подход.