Example #1
0
        private SharpObject ApplyMap(SharpObject map, SharpObject record, SharpObject context)
        {
            var obj = new SharpObject();

            foreach (var item in map)
            {
                if (item.Value is SharpObject)
                {
                    obj[item.Key] = ApplyMap((SharpObject)item.Value, record, context);
                }
                else if (item.Value is SharpObjectList)
                {
                    foreach (var child in (SharpObjectList)item.Value)
                    {
                        obj.Add(item.Key, ApplyMap(child, record, context));
                    }
                }
                else
                {
                    if (item.Value is string)
                    {
                        object fieldValue = record.Format((string)item.Value);

                        string stringValue = fieldValue.ToString();
                        if (SharpObject.IsFormatRequired(stringValue))
                        {
                            fieldValue  = obj.Format(stringValue);
                            stringValue = fieldValue.ToString();
                        }

                        if (SharpObject.IsFormatRequired(stringValue))
                        {
                            fieldValue  = null;
                            stringValue = "";
                        }

                        var fieldName  = item.Key;
                        var fieldParts = fieldName.Split('_');
                        if (fieldParts.Length == 2)
                        {
                            var fieldType = fieldParts[1].ToLower();
                            switch (fieldType)
                            {
                            case "bool":
                                fieldName = fieldParts[0];
                                if (string.IsNullOrEmpty(stringValue))
                                {
                                    fieldValue = false;
                                }
                                else if (stringValue == "0" || stringValue == "1")
                                {
                                    fieldValue = stringValue == "1";
                                }
                                else if (stringValue.StartsWith("y", StringComparison.OrdinalIgnoreCase) || stringValue.StartsWith("n", StringComparison.OrdinalIgnoreCase))
                                {
                                    fieldValue = stringValue.StartsWith("y", StringComparison.OrdinalIgnoreCase);
                                }
                                else
                                {
                                    fieldValue = Convert.ToBoolean(stringValue);
                                }

                                break;

                            case "int":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToInt32(stringValue);
                                break;

                            case "long":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToInt64(stringValue);
                                break;

                            case "datetime":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToDateTime(stringValue);
                                break;

                            case "decimal":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToDecimal(stringValue);
                                break;

                            case "list":
                                fieldName  = fieldParts[0];
                                fieldValue = EncodedString.ParseList(stringValue);
                                break;
                            }
                        }

                        obj[fieldName] = fieldValue;
                    }
                    else
                    {
                        obj[item.Key] = item.Value;
                    }
                }
            }


            return(obj);
        }