public void SetDataType(string propertyName, RestFieldDataType dataType) { if (_dataTypes == null) { _dataTypes = new Dictionary <string, RestFieldDataType>(); } _dataTypes[propertyName] = dataType; }
// Used as data accessor for _additionalData elements public object this[string propertyName] { get { if (_additionalData == null || !_additionalData.ContainsKey(propertyName)) { return(null); } RestFieldDataType type = RestFieldDataType.OBJECT; if (_dataTypes != null && _dataTypes.ContainsKey(propertyName)) { type = _dataTypes[propertyName]; } object baseObject = _additionalData[propertyName]; switch (type) { case RestFieldDataType.GRID: if (baseObject is GridField) { return(baseObject); } if (baseObject is JObject) { return((baseObject as JObject).ToObject <GridField>()); } return(null); case RestFieldDataType.OBJECT: return(baseObject); case RestFieldDataType.INTEGER: if (baseObject is int) { return(baseObject); } return(Convert.ToInt32(baseObject.ToString())); case RestFieldDataType.DATE: return(dbString2DateTime(baseObject.ToString())); case RestFieldDataType.STRING: return(baseObject.ToString()); case RestFieldDataType.BOOLEAN: if (baseObject is bool) { return(baseObject); } if (baseObject is int) { return((baseObject as int?) == 1); } return(baseObject.ToString().Trim().Equals("1")); } return(null); } set { if (_additionalData == null) { _additionalData = new Dictionary <string, object>(); } if (value == null) { _additionalData.Remove(propertyName); return; } object baseObject = value; if (_dataTypes != null && _dataTypes.ContainsKey(propertyName)) { switch (_dataTypes[propertyName]) { case RestFieldDataType.GRID: if (baseObject is JObject) { baseObject = (baseObject as JObject).ToObject <GridField>(); } if (!(baseObject is GridField)) { baseObject = null; } break; case RestFieldDataType.DATE: if (baseObject is DateTime) { baseObject = dateTime2DbString((DateTime)baseObject); } else { baseObject = ""; } break; case RestFieldDataType.INTEGER: case RestFieldDataType.STRING: baseObject = baseObject.ToString(); break; case RestFieldDataType.BOOLEAN: if (baseObject is bool && (baseObject as bool?) == true) { baseObject = "1"; } else { baseObject = "0"; } break; } } _additionalData[propertyName] = baseObject; } }