public void Add(KeyValuePair <string, object> item) { if (item.Value is SharpObjectDynamic) { _obj.Add(new KeyValuePair <string, object>(item.Key, ((SharpObjectDynamic)item.Value).GetObject())); } else if (item.Value is SharpObjectListDynamic) { _obj.Add(new KeyValuePair <string, object>(item.Key, ((SharpObjectListDynamic)item.Value).GetObjectList())); } else { _obj.Add(item); } }
public virtual SharpObject GetObject(string source) { // TODO: Add option to use packed+collapsed rows for faster reading when only a few columns are needed if (ColumnWidths.Count == 0) { return(new SharpObject()); } var column = 0; var width = ColumnWidths[column]; var sb = new StringBuilder(); var result = new SharpObject(); foreach (var c in source) { sb.Append(c); width--; if (width == 0) { var field = GetColumnName(ColumnNames[column]); var value = GetColumnValue(ColumnNames[column], sb.ToString()); if (IncludeEmptyFields || (value != null && (!(value is string) || !string.IsNullOrEmpty(value.ToString())))) { var parts = field.Split('/').ToList(); StringBuilder path = new StringBuilder(); for (int i = 0; i < parts.Count - 1; i++) { if (path.Length > 0) { path.Append("/"); } path.Append(parts[i]); var p = path.ToString(); if (!result.ContainsKey(p)) { result[p] = new SharpObject(); } } if (result.ContainsKey(field)) { result.Add(field, value); } else { result[field] = value; } } column++; if (column >= ColumnWidths.Count) { break; } width = ColumnWidths[column]; sb.Clear(); } } return(result); }
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); }