ln.objects/serialization/Serializer.cs

41 lines
1.2 KiB
C#

using ln.objects.catalog;
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ln.objects.serialization
{
public delegate bool LookupReference(object value, out object reference);
public delegate bool MangleValue(Type expectedType, ref object value);
public abstract class Serializer
{
public event LookupReference OnLookupReference;
public event MangleValue OnMangleValue;
public abstract bool SerializeObject(object o, out byte[] serializedBytes);
public bool TryLookupReference(object o, out object reference)
{
foreach (LookupReference lr in OnLookupReference?.GetInvocationList() ?? new LookupReference[0])
{
if (lr(o, out reference))
return true;
}
reference = null;
return false;
}
public bool MangleValue(Type expectedType,ref object value)
{
bool mangled = false;
foreach (MangleValue mv in OnMangleValue?.GetInvocationList() ?? new MangleValue[0])
if (mv(expectedType, ref value))
mangled = true;
return mangled;
}
}
}