1
0
mirror of synced 2024-11-15 01:33:51 +00:00
PettingZoo/PettingZoo.Core/Rendering/MessageBodyRenderer.cs

50 lines
1.4 KiB
C#
Raw Permalink Normal View History

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Newtonsoft.Json;
namespace PettingZoo.Core.Rendering
{
public class MessageBodyRenderer
{
private static readonly Dictionary<string, Func<byte[], string>> ContentTypeHandlers = new()
{
{ "application/json", RenderJson }
};
2021-12-06 13:08:29 +00:00
public static string Render(byte[] body, string? contentType)
{
return contentType != null && ContentTypeHandlers.TryGetValue(contentType, out var handler)
? handler(body)
: Encoding.UTF8.GetString(body);
}
public static string RenderJson(byte[] body)
{
var bodyText = Encoding.UTF8.GetString(body);
try
{
using var stringReader = new StringReader(bodyText);
using var jsonTextReader = new JsonTextReader(stringReader);
using var stringWriter = new StringWriter();
using var jsonWriter = new JsonTextWriter(stringWriter);
jsonWriter.Formatting = Formatting.Indented;
while (jsonTextReader.Read())
jsonWriter.WriteToken(jsonTextReader);
jsonWriter.Flush();
return stringWriter.ToString();
}
catch
{
return bodyText;
}
}
}
}