Пример #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);
        }
Пример #2
0
        public static object ToValue(string value, SharpValueType type, bool autoType = false)
        {
            if (value == null)
            {
                return(null);
            }

            switch (type)
            {
            case SharpValueType.None:
                if (autoType)
                {
                    return(ToValue(value, SharpValueType.Auto));
                }
                return(value);

            case SharpValueType.String:
                return(value);

            case SharpValueType.Bool:
            {
                bool boolResult;
                if (bool.TryParse(value, out boolResult))
                {
                    return(boolResult);
                }

                return(value);
            }

            case SharpValueType.Int:
            {
                int intResult;
                if (int.TryParse(value, out intResult))
                {
                    return(intResult);
                }

                return(value);
            }

            case SharpValueType.Long:
            {
                long longResult;
                if (long.TryParse(value, out longResult))
                {
                    return(longResult);
                }

                return(value);
            }

            case SharpValueType.Date:
            case SharpValueType.DateTime:
            case SharpValueType.TimeStamp:
            {
                DateTime dateResult;
                if (DateTime.TryParse(value, out dateResult))
                {
                    return(dateResult);
                }

                return(value);
            }

            case SharpValueType.TimeSpan:
            {
                TimeSpan timeSpanResult;
                if (TimeSpan.TryParse(value, out timeSpanResult))
                {
                    return(timeSpanResult);
                }
                return(value);
            }

            case SharpValueType.Double:
            {
                double doubleResult;
                if (double.TryParse(value, out doubleResult))
                {
                    return(doubleResult);
                }
                return(value);
            }

            case SharpValueType.Decimal:
            {
                Decimal decimalResult;
                if (Decimal.TryParse(value, out decimalResult))
                {
                    return(decimalResult);
                }
                return(value);
            }

            case SharpValueType.NumericString:
            {
                if (NumericString.CanEncode(value))
                {
                    return(new NumericString(value));
                }
                return(value);
            }

            case SharpValueType.List:
            {
                return(EncodedString.ParseList(value, trimStrings: true));
            }

            case SharpValueType.Object:
            {
                return(EncodedString.ParseObject(value));
            }
            }

            return(value);
        }