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; } } }