public override void WriteValueNotExisted(HessianWriter writer, HessianContext context, object value) { Type type = value.GetType(); if (!type.IsArray) { throw Exceptions.UnExpectedTypeException(type); } var elementType = type.GetElementType(); if (elementType == typeof(byte) || elementType == typeof(sbyte)) { GetConverter <BinaryConverter>().WriteValueNotNull(writer, context, value); return; } var array = (Array)value; HessianConverter itemConverter = null; if (elementType == typeof(object)) { //untyped array if (array.Length <= Constants.LIST_DIRECT_MAX) { writer.Write((byte)(Constants.BC_LIST_DIRECT_UNTYPED + array.Length)); } else { writer.Write(Constants.BC_LIST_FIXED_UNTYPED); IntConverter.WriteInt(writer, context, array.Length); } itemConverter = AutoConverter; } else { if (array.Length <= Constants.LIST_DIRECT_MAX) { writer.Write((byte)(Constants.BC_LIST_DIRECT + array.Length)); TypeConverter.WriteType(writer, context, type); } else { writer.Write(Constants.BC_LIST_FIXED); TypeConverter.WriteType(writer, context, type); IntConverter.WriteInt(writer, context, array.Length); } itemConverter = AutoConverter.GetConverter(elementType); } foreach (var item in array) { itemConverter.WriteValue(writer, context, item); } }
public override void WriteValueNotExisted(HessianWriter writer, HessianContext context, object value) { Type type = value.GetType(); Type itemType = null; if (type == typeof(ArrayList)) { itemType = typeof(object); } else if (IsGenericList(type)) { itemType = type.GenericTypeArguments[0]; } else { throw Exceptions.UnExpectedTypeException(type); } HessianConverter itemConverter = null; if (itemType == typeof(object)) { writer.Write(Constants.BC_LIST_VARIABLE_UNTYPED); itemConverter = AutoConverter; } else { writer.Write(Constants.BC_LIST_VARIABLE); TypeConverter.WriteType(writer, context, type); itemConverter = AutoConverter.GetConverter(itemType); } foreach (var item in (IEnumerable)value) { itemConverter.WriteValue(writer, context, item); } writer.Write(Constants.BC_END); }