/// <summary> /// Writes primitive objects and arrayy of primitive objects /// </summary> /// <param name="obj">Object to write</param> /// <param name="abstractHessianOutput">HessianOutput - Instance</param> /// <exception cref="CHessianException"/> public override void WriteObject(object obj, AbstractHessianOutput abstractHessianOutput) { switch (m_intCode) { case BOOLEAN: abstractHessianOutput.WriteBoolean(((bool)obj)); break; case BYTE: case SBYTE: case SHORT: case INTEGER: abstractHessianOutput.WriteInt(Convert.ToInt32(obj)); break; case LONG: abstractHessianOutput.WriteLong((long)obj); break; case FLOAT: abstractHessianOutput.WriteDouble(Convert.ToDouble(obj)); break; case DOUBLE: abstractHessianOutput.WriteDouble((double)obj); break; case CHARACTER: abstractHessianOutput.WriteInt((char)obj); break; case STRING: abstractHessianOutput.WriteString((string)obj); break; case DATE: DateTime dt = (DateTime)obj; const long timeShift = 62135596800000; long javaTime = dt.ToUniversalTime().Ticks / 10000 - timeShift; abstractHessianOutput.WriteUTCDate(javaTime); break; case INTEGER_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } int[] arrData = (int[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[int"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteInt(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case STRING_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } String[] arrData = (String[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[string"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteString(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case BOOLEAN_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } bool[] arrData = (bool[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[boolean"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteBoolean(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case BYTE_ARRAY: { byte[] arrData = (byte[])obj; abstractHessianOutput.WriteBytes(arrData, 0, arrData.Length); break; } case SBYTE_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } sbyte[] arrData = (sbyte[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[sbyte"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteInt(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case SHORT_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } short[] arrData = (short[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[short"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteInt(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case LONG_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } long[] arrData = (long[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[long"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteLong(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case FLOAT_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } float[] arrData = (float[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[float"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteDouble(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case DOUBLE_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } double[] arrData = (double[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[double"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteDouble(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } case CHARACTER_ARRAY: { char[] arrData = (char[])obj; abstractHessianOutput.WriteString(arrData, 0, arrData.Length); break; } case OBJECT_ARRAY: { if (abstractHessianOutput.AddRef(obj)) { return; } Object[] arrData = (Object[])obj; bool hasEnd = abstractHessianOutput.WriteListBegin(arrData.Length, "[object"); for (int i = 0; i < arrData.Length; i++) { abstractHessianOutput.WriteObject(arrData[i]); } if (hasEnd) { abstractHessianOutput.WriteListEnd(); } break; } default: throw new CHessianException(m_intCode + " " + obj.GetType().ToString()); } #endregion }