为什么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();
}

输出如下所示:{对象}{methoda}…{objN}全部放在一行。

但是我想:

{其中obj1}

{methoda}

我该怎么做?

为清晰起见,提供的示例被缩进,但默认行为是写入结果JSON字符串而不包含任何不必要的空白。您可以这样重写此行为:

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

进一步阅读

  • Formatting enum

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

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

或者通过在底层TextWriter上调用WriteLine,尽管这需要在此方法之外完成。

算出来了,虽然不确定是否有更干净的方法。我加了一个

jw.WriteWhitespace(Environment.NewLine);

在末尾。现在一切看起来都很好:

{"时间戳":"2014 - 03 - 10 t15:04:27.0128185…}
{"时间戳":"2014 - 03 - 10 t15:04:27.0128185…}
div…

相关内容

  • 没有找到相关文章

最新更新