/// <summary> /// Convert xml element to its representing object. /// </summary> /// <param name="objType">Type of the result object.</param> /// <param name="element">The xml elemnt to convert.</param> /// <param name="settings"> /// Convert settings used during the convertion. <see cref="XConvertSettings.Default" /> will be used if the value is /// <see langword="null" />. /// </param> /// <returns>Object that converted from <paramref name="element" />.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="objType" /> or <paramref name="element" /> is <see langword="null" />. /// </exception> public static object ToObject(Type objType, XElement element, XConvertSettings settings = null) { Ensure.Argument.NotNull(objType, "objType"); Ensure.Argument.NotNull(element, "element"); settings = settings ?? XConvertSettings.Default; var converter = settings.FindConverter(objType); return(converter.ToObject(objType, element, settings)); }
public static void PopulateObject(object obj, XElement element, XConvertSettings settings = null) { Ensure.Argument.NotNull(obj, "obj"); Ensure.Argument.NotNull(element, "element"); settings = settings ?? XConvertSettings.Default; var converter = settings.FindConverter(obj.GetType()); converter.PopulateObject(obj, element, settings); }
/// <summary> /// Convert an object to xml element. /// </summary> /// <param name="name">Name of the element.</param> /// <param name="obj">The object to convert.</param> /// <param name="settings"> /// Convert settings used during the convertion. <see cref="XConvertSettings.Default" /> will be used if the value is /// <see langword="null" />. /// </param> /// <returns>An instance of <see cref="XElement" /> that represents <paramref name="obj" />.</returns> /// <exception cref="ArgumentNullException"><paramref name="obj" /> is <see langword="null" />.</exception> public static XElement ToElement(string name, object obj, XConvertSettings settings = null) { Ensure.Argument.NotNull(obj, "obj"); settings = settings ?? XConvertSettings.Default; var type = obj.GetType(); var converter = settings.FindConverter(type); return(converter.ToElement(name, type, obj, settings)); }
protected override void PopulateElementChildren( XElement element, Type declareType, object obj, XConvertSettings settings) { if (obj == null) { return; } var actualType = obj.GetType(); Ensure.Argument.Is(actualType, "obj", declareType); foreach (var members in EnumMembers(obj)) { var memberCount = members.Count(); foreach (var member in members) { Type declareMemberType = null; Type actualMemberType = null; object value = null; var field = member as FieldInfo; if (field != null) { declareMemberType = field.FieldType; value = field.GetValue(obj); if (value != null) { actualMemberType = value.GetType(); } } var property = member as PropertyInfo; if (property != null && property.CanRead) { declareMemberType = property.PropertyType; value = property.GetValue(obj, null); if (value != null) { actualMemberType = value.GetType(); } } var memberType = actualMemberType ?? declareMemberType; var converter = settings.FindConverter(memberType); var name = memberCount > 1 ? GetHierachicalMemberName(actualType, member) : member.Name; var memberElement = converter.ToElement(name, declareMemberType, value, settings); element.Add(memberElement); } } }
protected override void PopulateObjectImpl(object obj, XElement element, XConvertSettings settings) { var objType = obj.GetType(); var membersDict = GetMembers(obj); foreach (var memberElement in element.Elements()) { string name; MemberInfo member; GetMemberInfo(objType, membersDict, memberElement, out name, out member); if (member == null) { switch (MissingMemberHandling) { case MissingMemberHandling.Ignore: continue; case MissingMemberHandling.ThrowException: throw new MissingMemberException(objType.FullName, name); default: continue; } } var declareMemberType = GetDeclareMemberType(member); var actualMemberType = XConvertUtil.ParseType(memberElement); if (actualMemberType != null) { if (actualMemberType != declareMemberType && !actualMemberType.IsSubclassOf(declareMemberType)) { throw new XmlException(string.Format( "Object(of type {0}) member type({1}) from xml does not match with its declare type({2}) of the object.", objType, actualMemberType, declareMemberType)); } } var usingMemberType = actualMemberType ?? declareMemberType; var converter = settings.FindConverter(usingMemberType); var value = converter.ToObject(usingMemberType, memberElement, settings); SetMemberValue(member, obj, value); } }