66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace Microsoft.AspNet.Mvc
|
|
{
|
|
public class JsonOutputFormatter
|
|
{
|
|
private readonly JsonSerializerSettings _settings;
|
|
private readonly bool _indent;
|
|
|
|
public JsonOutputFormatter([NotNull] JsonSerializerSettings settings, bool indent)
|
|
{
|
|
_settings = settings;
|
|
_indent = indent;
|
|
}
|
|
|
|
public static JsonSerializerSettings CreateDefaultSettings()
|
|
{
|
|
return new JsonSerializerSettings()
|
|
{
|
|
MissingMemberHandling = MissingMemberHandling.Ignore,
|
|
|
|
// Do not change this setting
|
|
// Setting this to None prevents Json.NET from loading malicious, unsafe, or security-sensitive types.
|
|
TypeNameHandling = TypeNameHandling.None
|
|
};
|
|
}
|
|
|
|
public void WriteObject([NotNull] TextWriter writer, object value)
|
|
{
|
|
using (var jsonWriter = CreateJsonWriter(writer))
|
|
{
|
|
var jsonSerializer = CreateJsonSerializer();
|
|
jsonSerializer.Serialize(jsonWriter, value);
|
|
|
|
// We're explicitly calling flush here to simplify the debugging experience because the
|
|
// underlying TextWriter might be long-lived. If this method ends up being called repeatedly
|
|
// for a request, we should revisit.
|
|
jsonWriter.Flush();
|
|
}
|
|
}
|
|
|
|
private JsonWriter CreateJsonWriter([NotNull] TextWriter writer)
|
|
{
|
|
var jsonWriter = new JsonTextWriter(writer);
|
|
if (_indent)
|
|
{
|
|
jsonWriter.Formatting = Formatting.Indented;
|
|
}
|
|
|
|
jsonWriter.CloseOutput = false;
|
|
|
|
return jsonWriter;
|
|
}
|
|
|
|
private JsonSerializer CreateJsonSerializer()
|
|
{
|
|
var jsonSerializer = JsonSerializer.Create(_settings);
|
|
return jsonSerializer;
|
|
}
|
|
}
|
|
}
|