【发布时间】:2020-02-06 05:13:36
【问题描述】:
我正在寻找一种在序列化后将 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 个属性之后添加一个新行。假设每 3 个属性。
我尝试过这样的事情:
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);
现在,这适用于简单的属性。但是当我开始引入像数组这样的类型时,Regex 变得更加复杂。
我想知道是否有更简单的方法。
【问题讨论】:
-
您是否只需要每个 x 属性的新行?或者你会接受完全缩进的 JSON 输出吗?您可以将第二个参数传递给 SerializeObject 方法以指示您想要格式化输出。 newtonsoft.com/json/help/html/…
-
正如问题所述,我想根据计数缩进