Headless CMS and Content Managment Hub
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
2.1 KiB

// ==========================================================================
// JsonPropertiesBagConverter.cs
// PinkParrot Headless CMS
// ==========================================================================
// Copyright (c) PinkParrot Group
// All rights reserved.
// ==========================================================================
using System;
using Newtonsoft.Json;
using NodaTime;
using NodaTime.Extensions;
namespace PinkParrot.Infrastructure.Json
{
public sealed class PropertiesBagConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(PropertiesBag);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var properties = new PropertiesBag();
while (reader.Read())
{
if (reader.TokenType != JsonToken.PropertyName)
{
break;
}
var key = reader.Value.ToString();
reader.Read();
var value = reader.Value;
if (value is DateTime)
{
properties.Set(key, ((DateTime)value).ToInstant());
}
else
{
properties.Set(key, value);
}
}
return properties;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var properties = (PropertiesBag)value;
writer.WriteStartObject();
foreach (var kvp in properties.Properties)
{
writer.WritePropertyName(kvp.Key);
if (kvp.Value.RawValue is Instant)
{
writer.WriteValue(kvp.Value.ToString());
}
else
{
writer.WriteValue(kvp.Value.RawValue);
}
}
writer.WriteEndObject();
}
}
}