为什么JSON.NET在一行上序列化所有内容?

时间:2014-03-13 02:16:51

标签: c# json json.net

我只是希望JSON.net序列化程序写出JSON对象(到文件),每行一个对象,而只是将所有内容都附加在同一条顶行。所有JSON.net示例似乎暗示我想要的是默认行为,但我没有看到它以这种方式工作。这是代码:

static void EtwToJsonHelper(TraceEvent data, JsonSerializer s, JsonTextWriter jw)
{
    var names = data.PayloadNames;

    jw.WriteStartObject();
    jw.WritePropertyName("TimeStamp");
    jw.WriteValue(data.TimeStamp);
    ...
    jw.WriteEndObject();
}

输出如下: {object} {obj2} ... {objN}全部在一行上。

但我想:

{OBJ1}

{OBJ2}

...

我该怎么做?

2 个答案:

答案 0 :(得分:12)

为了清楚起见,提供的示例是缩进的,但默认行为是在没有任何不必要的空格的情况下编写生成的JSON字符串。您可以像这样覆盖此行为:

jw.Formatting = Formatting.Indented;
jw.WriteStartObject();
...

进一步阅读


为了确保每个条目都附加到一个新行,您可以在编写JSON对象后编写一个新的行字符,如下所示:

...
jw.WriteEndObject();
jw.WriteRaw("\n");

或者通过在基础TextWriter上调用WriteLine,虽然这需要在此方法之外完成。

答案 1 :(得分:1)

想出来,虽然不确定是否有更清洁的方式。我添加了一个

jw.WriteWhitespace(Environment.NewLine);

最后。现在一切都很好看:

{ “时间戳”: “2014-03-10T15:04:27.0128185”,...}
{ “时间戳”: “2014-03-10T15:04:27.0128185”,...}
...