41 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|