Example #1
0
        public static object DeSerialise(XmlNode node, string overrideType)
        {
            // Check if the value is null
            bool   isNil = (XmlHelper.GetAttributeValue(node, "i:nil") == "true");
            object value = null;

            if (!isNil)
            {
                string typeName = overrideType;
                if (typeName == null)
                {
                    typeName = _removeNsPrefix(XmlHelper.GetAttributeValue(node, "i:type"));
                }

                string stringValue = XmlHelper.GetNodeTextValue(node);
                switch (typeName)
                {
                case AttributeTypes.EntityReference:
                    EntityReference entityReferenceValue = new EntityReference(
                        new Guid(XmlHelper.SelectSingleNodeValue(node, "Id")),
                        XmlHelper.SelectSingleNodeValue(node, "LogicalName"),
                        XmlHelper.SelectSingleNodeValue(node, "Name"));

                    value = entityReferenceValue;
                    break;

                case AttributeTypes.AliasedValue:
                    value = DeSerialise(XmlHelper.SelectSingleNode(node, "Value"), null);
                    break;

                case AttributeTypes.Boolean_:
                    value = (stringValue == "true");
                    break;

                case AttributeTypes.Decimal_:
                    value = decimal.Parse(stringValue);
                    break;

                case AttributeTypes.DateTime_:
                    DateTime dateValue = DateTimeEx.Parse(stringValue);

                    // We need it in the CRM Users timezone
                    UserSettings settings = OrganizationServiceProxy.UserSettings;
                    if (settings != null)
                    {
                        // Remove the local date formating so that it is in UTC irrespective of the local timezone
                        dateValue.SetTime(dateValue.GetTime() + (dateValue.GetTimezoneOffset() * 60 * 1000));

                        DateTime localDateValue = DateTimeEx.UTCToLocalTimeFromSettings(dateValue, settings);
                        value = localDateValue;
                    }
                    else
                    {
                        value = dateValue;
                    }

                    break;

                case "guid":
                    value = new Guid(stringValue);
                    break;

                case AttributeTypes.Int_:
                    value = int.Parse(stringValue);
                    break;

                case AttributeTypes.OptionSetValue:
                    value = OptionSetValue.Parse(XmlHelper.SelectSingleNodeValue(node, "Value"));
                    break;

                case AttributeTypes.Money:
                    value = new Money(decimal.Parse(XmlHelper.SelectSingleNodeValue(node, "Value")));
                    break;

                default:
                    value = stringValue;
                    break;
                }
            }
            return(value);
        }