public object HeapDeresolve(XElement serialized) { if (serialized == null || XMLUtility.IsNullOf(serialized)) { return(null); } return(HeapDeresolve(serialized, ResolversManager.GetResolver(serialized.Name.LocalName))); }
/// <summary> /// Десериализирует serializedObject в target. /// Данный метод формирует состоняеие экземпляра. /// /// Important Note: Данный метод не взаимодействет с кучами, предпологается что все необходимые /// манипуляции с кучами были сделаны до вызова этого метода /// </summary> /// <param name="instance">Объект в который буде производиться десериализация</param> /// <param name="serializedObject"></param> public void DeresolveTo(object target, XElement serializedObject) { //Вызов внутреннего метода DeresolveInternal( serializedObject, ref target, ResolversManager.GetResolver(TypeManager.ConventionOf(target.GetType())) ); }
/// <summary> /// Сериализирует resolveObject в target. /// Данный метод формирует тело сериализированной версии объекта. /// /// Important Note: Данный метод не взаимодействет с кучами, предпологается что все необходимые /// манипуляции с кучами были сделаны до вызова этого метода /// </summary> /// <param name="resolveObject">Объект который необходиом сериализировать</param> /// <param name="target">xml-узел в который необходимо произвести сериализацию</param> public void ResolveTo(object resolveObject, XElement target) { //Вызов внутреннего метода ResolveToInternal( resolveObject, ResolversManager.GetResolver(TypeManager.ConventionOf(resolveObject.GetType())), target ); }
/// <summary> /// Десериализирует объект, наиболее подходящим для него способом. /// Допускается значение соответствеющие* значению NULL. /// /// *xml-узел должен иметь вид <NULL />. Значение NULL для самого узла serializedObject недопустимо /// </summary> /// <param name="serializedObject"></param> /// <returns></returns> public object AutoDeresolve(XElement serializedObject) { if (XMLUtility.IsNullOf(serializedObject)) { return(null); } var conventionType = serializedObject.Name.LocalName; var type = TypeManager.TypeOf(conventionType); var resolver = ResolversManager.GetResolver(conventionType); if (SerializationUtility.Targeting.IsSaveReferenceInternal(type)) { return(HeapDeresolve(serializedObject, resolver)); } else { object instance = resolver.GetTemplateInstance(serializedObject); DeresolveInternal(serializedObject, ref instance, resolver); return(instance); } }
/// <summary> /// Десериализирует xml-узел serializedObject в возвращаймый объект, используя действительный сериализатор для типа объекта serializedObject. /// Не допускается значение null ни для какаих входных параметров. /// Метод является контекстным. /// Обращается к банку resolver`ов для получения resolver`а /// </summary> /// <param name="serializedObject">Десериализируемый объект</param> /// <param name="convention">Условное обозночение типа</param> /// <returns>Результат десериализации</returns> internal void DeresolveInternal(XElement serializedObject, ref object instance, string convention) { ResolversManager.GetResolver(convention).Deserialzie(serializedObject, ref instance); }
/// <summary> /// Сериализирует объект resolveObject в xml-узел serializeHere используя действительный сериализатор для объектов типа conventionType /// Не допускается значение null ни для какаих входных параметров. /// Метод является контекстным. /// Обращается к банку resolver`ов для получения resolver`а /// </summary> /// <param name="resolveObject">Сериализируемый объект</param> /// <param name="conventionType">Условное обозночение типа</param> /// <param name="serializeHere">xml-узел в который будет записан результат сериализации</param> internal void ResolveToInternal(object resolveObject, string conventionType, XElement serializeHere) { ResolversManager.GetResolver(conventionType).Serialize(serializeHere, resolveObject); }