/// <exception cref="System.MissingMethodException"/> /// <exception cref="java.lang.IllegalAccessException"/> /// <exception cref="java.lang.reflect.InvocationTargetException"/> /// <exception cref="VPackException"/> private void SerializeObject( string name, object entity, VPackBuilder builder, IDictionary <string, object> additionalFields) { IVPackSerializer serializer = this.serializers[entity.GetType()]; if (serializer != null) { serializer.Serialize(builder, name, entity, this.serializationContext); } else { builder.Add(name, ValueType.OBJECT); this.SerializeFields(entity, builder, additionalFields); if (additionalFields.Count > 0) { additionalFields.Clear(); builder.Close(true); } else { builder.Close(false); } } }
/// <exception cref="System.MissingMethodException"/> /// <exception cref="java.lang.IllegalAccessException"/> /// <exception cref="java.lang.reflect.InvocationTargetException"/> /// <exception cref="VPackException"/> private void AddValue( string name, Type type, object value, VPackBuilder builder, VPackCache.FieldInfo fieldInfo, IDictionary <string, object> additionalFields) { if (value == null) { if (this.serializeNullValues) { builder.Add(name, ValueType.NULL); } } else { IVPackSerializer serializer = this.serializers[type]; if (serializer != null) { serializer.Serialize(builder, name, value, this.serializationContext); } else { var info = type.GetTypeInfo(); if (type.IsGenericParameter) { if (!type.IsConstructedGenericType) { throw new TypeLoadException(string.Format("Creating open generic types are not supported. ({0})", type)); } Type[] gens; if (typeof(IDictionary <,>).GetTypeInfo().IsAssignableFrom(info)) { gens = type.GetTargetType(typeof(IDictionary <,>)).GenericTypeArguments; this.SerializeMap(name, value, builder, gens[0], additionalFields); } else if (typeof(IEnumerable <>).GetTypeInfo().IsAssignableFrom(info)) { this.SerializeIterable(name, value, builder, additionalFields); } else if (type.IsConstructedGenericType) { this.SerializeObject(name, value, builder, additionalFields); } } else { if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(info)) { this.SerializeMap(name, value, builder, typeof(string), additionalFields); } else if (typeof(IEnumerable).GetTypeInfo().IsAssignableFrom(info)) { this.SerializeIterable(name, value, builder, additionalFields); } else if (info.IsArray) { this.SerializeArray(name, (Array)value, builder, additionalFields); } else { this.SerializeObject(name, value, builder, additionalFields); } } } } }