Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can Json.NET serialize to stream with Formatting?

Tags:

json

c#

json.net

When using Json.NET library, you can specify formatting when you are serialising to string, but I can't find this option when serialising directly to stream. Am I missing something?

The code for the two serialisation methods is as follows:

public static string Serialize(MyObject obj)
{
    JsonSerializerSettings settings = GetJsonSerializerSettings();
    return JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
}

public static void SerializeToStream(MyObject obj, Stream stream)
{
    var serializer = JsonSerializer.Create(GetJsonSerializerSettings());

    using (var sw = new StreamWriter(stream))
    using (var jsonTextWriter = new JsonTextWriter(sw))
    {
        serializer.Serialize(jsonTextWriter, obj);
    }
}

private static JsonSerializerSettings GetJsonSerializerSettings()
{
    JsonSerializerSettings settings = new JsonSerializerSettings
    {
        Converters = new List<JsonConverter>
        {
            new StringEnumConverter()
        }
    };
    return settings;
}
like image 462
Grzenio Avatar asked Oct 30 '14 17:10

Grzenio


1 Answers

I haven't tried it, but I'd expect it to be fine if you specify the formatting in the settings:

public static void SerializeToStream(MyObject obj, Stream stream)
{
    var settings = GetJsonSerializerSettings();
    settings.Formatting = Formatting.Indented;
    var serializer = JsonSerializer.Create(settings);

    using (var sw = new StreamWriter(stream))
    using (var jsonTextWriter = new JsonTextWriter(sw))
    {
        serializer.Serialize(jsonTextWriter, obj);
    }
}

(Or change GetJsonSerializerSettings in a similar way, of course.)

like image 85
Jon Skeet Avatar answered Nov 05 '22 11:11

Jon Skeet