private void DeserializeNodeToCollection(IEnumerable <XElement> valueNodes, XmlDeserializeContext context, Action <int, object> action) { int i = 0; foreach (XElement item in valueNodes) { object itemData = null; string elementID = item.Attribute("v").Value; if (item.AttributeWithAlterName("isRef", "r", false) == true) { XElement objectElement = GetObjectElementByID(context.RootElement, item.AttributeWithAlterName("value", "v", 0)); itemData = DeserializeNodeToObject(objectElement, false, context); } else { Type type = context.GetTypeInfo(item.AttributeWithAlterName("ownerTypeID", "oti", string.Empty)); itemData = item.AttributeWithAlterName("value", "v", TypeCreator.GetTypeDefaultValue(type)); itemData = DataConverter.ChangeType(itemData, type); } action(i, itemData); i++; } }
private object DeserializeNodeToObject(XElement objectNode, bool ignoreError, XmlDeserializeContext context) { object data = null; int objID = objectNode.Attribute("id", 0); if (context.ObjectContext.TryGetValue(objID, out data) == false) { try { Type type = context.GetTypeInfo(objectNode.AttributeValueWithAlterName("ownerTypeID", "oti")); XElementFieldSerializeAttribute attr = AttributeHelper.GetCustomAttribute <XElementFieldSerializeAttribute>(type); if (attr != null && attr.IgnoreDeserializeError == true) { ignoreError = attr.IgnoreDeserializeError; } data = CreateSerializableInstance(type); context.ObjectContext.Add(objID, data); if ((data is IXElementSerializable) && objectNode.Attribute("cs", false) == true) { ((IXElementSerializable)data).Deserialize(objectNode, context); } else { string objectValue = objectNode.Element("Value", string.Empty); if (objectValue.IsNotEmpty()) { SerializationBinder binder = this.Binder ?? UnknownTypeStrategyBinder.Instance; data = SerializationHelper.DeserializeStringToObject(objectValue, SerializationFormatterType.Binary, binder); } else { DeserializeNodesToProperties(objectNode, data, context); } } if (data is IXmlDeserialize) { ((IXmlDeserialize)data).AfterDeserialize(context); } } catch (System.Exception) { if (ignoreError == false) { throw; } } } return(data); }
private void DeserializeNodeToCollection(IEnumerable<XElement> valueNodes, XmlDeserializeContext context, Action<int, object> action) { int i = 0; foreach (XElement item in valueNodes) { object itemData = null; string elementID = item.Attribute("v").Value; if (item.AttributeWithAlterName("isRef", "r", false) == true) { XElement objectElement = GetObjectElementByID(context.RootElement, item.AttributeWithAlterName("value", "v", 0)); itemData = DeserializeNodeToObject(objectElement, false, context); } else { Type type = context.GetTypeInfo(item.AttributeWithAlterName("ownerTypeID", "oti", string.Empty)); itemData = item.AttributeWithAlterName("value", "v", TypeCreator.GetTypeDefaultValue(type)); itemData = DataConverter.ChangeType(itemData, type); } action(i, itemData); i++; } }
private object DeserializeNodeToObject(XElement objectNode, bool ignoreError, XmlDeserializeContext context) { object data = null; int objID = objectNode.Attribute("id", 0); if (context.ObjectContext.TryGetValue(objID, out data) == false) { try { Type type = context.GetTypeInfo(objectNode.AttributeValueWithAlterName("ownerTypeID", "oti")); XElementFieldSerializeAttribute attr = AttributeHelper.GetCustomAttribute<XElementFieldSerializeAttribute>(type); if (attr != null && attr.IgnoreDeserializeError == true) ignoreError = attr.IgnoreDeserializeError; data = CreateSerializableInstance(type); context.ObjectContext.Add(objID, data); if ((data is IXElementSerializable) && objectNode.Attribute("cs", false) == true) { ((IXElementSerializable)data).Deserialize(objectNode, context); } else { string objectValue = objectNode.Element("Value", string.Empty); if (objectValue.IsNotEmpty()) { SerializationBinder binder = this.Binder ?? UnknownTypeStrategyBinder.Instance; data = SerializationHelper.DeserializeStringToObject(objectValue, SerializationFormatterType.Binary, binder); } else { DeserializeNodesToProperties(objectNode, data, context); } } if (data is IXmlDeserialize) ((IXmlDeserialize)data).AfterDeserialize(context); } catch (System.Exception) { if (ignoreError == false) throw; } } return data; }