47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
|
|
namespace QFSW.QC.Serializers
|
|
{
|
|
public class KeyValuePairSerializer : GenericQcSerializer
|
|
{
|
|
protected override Type GenericType { get; } = typeof(KeyValuePair<,>);
|
|
|
|
private readonly Dictionary<Type, PropertyInfo> _keyPropertyLookup = new Dictionary<Type, PropertyInfo>();
|
|
private readonly Dictionary<Type, PropertyInfo> _valuePropertyLookup = new Dictionary<Type, PropertyInfo>();
|
|
|
|
public override string SerializeFormatted(object value, QuantumTheme theme)
|
|
{
|
|
Type type = value.GetType();
|
|
PropertyInfo keyProperty;
|
|
PropertyInfo valueProperty;
|
|
|
|
if (_keyPropertyLookup.ContainsKey(type))
|
|
{
|
|
keyProperty = _keyPropertyLookup[type];
|
|
}
|
|
else
|
|
{
|
|
keyProperty = type.GetProperty("Key");
|
|
_keyPropertyLookup[type] = keyProperty;
|
|
}
|
|
|
|
if (_valuePropertyLookup.ContainsKey(type))
|
|
{
|
|
valueProperty = _valuePropertyLookup[type];
|
|
}
|
|
else
|
|
{
|
|
valueProperty = type.GetProperty("Value");
|
|
_valuePropertyLookup[type] = valueProperty;
|
|
}
|
|
|
|
string innerKey = SerializeRecursive(keyProperty.GetValue(value, null), theme);
|
|
string innerValue = SerializeRecursive(valueProperty.GetValue(value, null), theme);
|
|
|
|
return $"{innerKey}: {innerValue}";
|
|
}
|
|
}
|
|
}
|