jeking
jeking

Reputation: 171

Why does JSON.NET serialize everything on a single line?

I simply want the JSON.net serializer to write out JSON objects (to file), one object per line but instead it just appends everything on the same top line. All of the JSON.net samples seem to imply that what I want is default behavior but I'm not seeing it work that way. Here's code:

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

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

Output looks like this: {object}{obj2}...{objN} all on a single line.

But I want:

{obj1}

{obj2}

...

How do I do this?

Upvotes: 14

Views: 20968

Answers (2)

jeking
jeking

Reputation: 171

Figured it out, though not sure if there's a cleaner way. I added a

jw.WriteWhitespace(Environment.NewLine);

at the end. Now everything looks good:

{"TimeStamp":"2014-03-10T15:04:27.0128185",...}
{"TimeStamp":"2014-03-10T15:04:27.0128185",...}
...

Upvotes: 2

p.s.w.g
p.s.w.g

Reputation: 149068

The samples provided are indented for clarity, but the default behavior is to write the resulting JSON string without any unnecessary whitespace. You can override this behavior like this:

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

Further Reading


To ensure that each entry is appended to a new line, you could simply write a new line character after you've written your JSON object, like this:

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

Or by calling WriteLine on the underlying TextWriter, though that would need to be done outside of this method.

Upvotes: 18

Related Questions