protected override ArrayType ImplDeserializeEnumerable( IValueSequence serialization, IRepositorySerializationContext context) { Object array = null; Int32 arraySize = 0; Int32 idx = 0; String itemStrValue = null; ICollection coll = null; IList list = null; NumericStringValue numericString = null; if ((coll = serialization.Value as ICollection) != null) { arraySize = coll.Count; } IEnumerator enumerator = ImplDeserializeEnumerable( serialization.Value, context).GetEnumerator(); if (enumerator == null) { return(default(ArrayType)); } if (!enumerator.MoveNext()) { return(default(ArrayType)); } array = new ArrayItemType [arraySize]; list = array as IList; do { try { if ((numericString = enumerator.Current as NumericStringValue) != null) { list [idx++] = numericString.ToType(typeof(ArrayItemType), null); } else if (Type.GetTypeCode(typeof(ArrayItemType)) == TypeCode.DateTime && (itemStrValue = enumerator.Current as String) != null) { list [idx++] = DateTime.ParseExact(itemStrValue, "o", null); } else { list [idx++] = enumerator.Current; } } catch { break;; } }while (enumerator.MoveNext()); return((ArrayType)array); } // End of ImplDeserializeEnumerable (...)
} // End of ImplIsString (...) protected virtual ArrayList ImplParseArray( out JsonScanner.TokenBase endToken, TextReader textReader) { endToken = JsonScanner.EofToken.Singleton; if (textReader == null) { return(null); } JsonScanner.NumericToken numericToken = null; ArrayList retVal = new ArrayList(); //JsonScanner.StringToken strToken = null; JsonScanner.TokenBase token = null; Object value = null; IValueProvider <Object> valueProvider = null; do { token = JsonScanner.Singleton.ScanToken(textReader); if (token == JsonScanner.SquaredOpenToken.Singleton) { } else if (token == JsonScanner.CurlyOpenToken.Singleton) { value = ImplParseUnit(out token, textReader); if (token != JsonScanner.CurlyCloseToken.Singleton) { return(null); } } else if ((numericToken = token as JsonScanner.NumericToken) != null) { value = new NumericStringValue(numericToken.Value); } else if ((valueProvider = token as IValueProvider <Object>) != null) { value = valueProvider.Value; } else { return(null); // Unespected token } retVal.Add(value); token = JsonScanner.Singleton.ScanToken(textReader); }while (token == JsonScanner.CommaToken.Singleton); endToken = token; return(retVal); } // End of ImplParseArray (...)
} // End of ImplBoundValueAlign (...) private Boolean _BoundNumberAlign() { NumericStringValue numericString = Value as NumericStringValue; if (numericString == null) { return(false); } ValueBinder.BoundObjectValue = numericString.ToType( ValueBinder.BoundObjectValue.GetType(), null); return(true); } // End of ImplBoundValueAlign (...)
} // End of ImplParseArray (...) protected virtual IValueUnit ImplParseUnit( out JsonScanner.TokenBase endToken, TextReader textReader) { endToken = JsonScanner.EofToken.Singleton; if (textReader == null) { return(null); } JsonScanner.NumericToken numericToken = null; String key = null; JsonScanner.TokenBase token = null; ValueUnit retVal = new ValueUnit(); JsonScanner.StringToken strToken = null; Object value = null; IValueProvider <Object> valueProvider = null; do { token = JsonScanner.Singleton.ScanToken(textReader); if ((strToken = token as JsonScanner.StringToken) == null) { return(null); // Unespected token } else { key = strToken.Value; } token = JsonScanner.Singleton.ScanToken(textReader); if (token != JsonScanner.ColonToken.Singleton) { return(null); // Unespected token } token = JsonScanner.Singleton.ScanToken(textReader); if ((strToken = token as JsonScanner.StringToken) != null) { value = strToken.Value; } else if (token == JsonScanner.SquaredOpenToken.Singleton) { value = ImplParseArray(out token, textReader); if (token == JsonScanner.SquaredCloseToken.Singleton) { value = new ValueSequence((IEnumerable)value); } else { return(null); } } else if (token == JsonScanner.CurlyOpenToken.Singleton) { value = ImplParseUnit(out token, textReader); if (token != JsonScanner.CurlyCloseToken.Singleton) { return(null); } } else if ((numericToken = token as JsonScanner.NumericToken) != null) { value = new NumericStringValue(numericToken.Value); } else if ((valueProvider = token as IValueProvider <Object>) != null) { value = valueProvider.Value; } else { return(null); // Unespected token } retVal.Add(new ValueItem(key, value)); token = JsonScanner.Singleton.ScanToken(textReader); }while (token == JsonScanner.CommaToken.Singleton); endToken = token; return(retVal); } // End of ImplParseUnit (...)