public void LoadDataFromXmlCustom(XmlNode xmlRoot) { XmlAttribute mayRequire = xmlRoot.Attributes[name : "MayRequire"]; int index = mayRequire != null?xmlRoot.Name.LastIndexOf(value : '\"') + 1 : 0; DirectXmlCrossRefLoader.RegisterObjectWantsCrossRef(this, nameof(this.hediff), xmlRoot.Name.Substring(index, xmlRoot.Name.Length - index), mayRequire?.Value.ToLower()); this.path = xmlRoot.FirstChild.Value?.Trim(); Traverse traverse = Traverse.Create(this); foreach (XmlNode xmlRootChildNode in xmlRoot.ChildNodes) { Traverse field = traverse.Field(xmlRootChildNode.Name); if (field.FieldExists()) { field.SetValue(field.GetValueType().IsGenericType ? DirectXmlToObject.GetObjectFromXmlMethod(field.GetValueType())(xmlRootChildNode, arg2: false) : xmlRootChildNode.InnerXml.Trim()); } } }