下面列出了怎么用com.alibaba.fastjson.serializer.ObjectSerializer的API类实例代码及写法,或者点击链接到github查看源代码。
@AnnotatedClassFinder(For.class)
public void foundFor(Class<?> type) {
For forAnno = type.getAnnotation(For.class);
Class[] targetTypes = forAnno.value();
if (0 == targetTypes.length) {
warn("@For annotation on [%s] must have target type specified", type.getName());
return;
}
if (ObjectSerializer.class.isAssignableFrom(type)) {
ObjectSerializer serializer = (ObjectSerializer) app.getInstance(type);
handleForSerializer(serializer, targetTypes);
}
if (ObjectDeserializer.class.isAssignableFrom(type)) {
ObjectDeserializer deserializer = (ObjectDeserializer) app.getInstance(type);
handleForDeserializer(deserializer, targetTypes);
}
}
private void handleForSerializer(final ObjectSerializer serializer, Class targetType) {
ClassNode node = repo.node(targetType.getName());
if (null == node) {
warn("Unknown target type: " + targetType.getName());
return;
}
final SerializeConfig config = SerializeConfig.getGlobalInstance();
node.visitSubTree(new Lang.Visitor<ClassNode>() {
@Override
public void visit(ClassNode classNode) throws Lang.Break {
Class type = app.classForName(classNode.name());
config.put(type, serializer);
}
});
config.put(targetType, serializer);
}
public void setSerializers(Map<Type, ObjectSerializer> dest){
this.put(BigInteger.class, ToStringSerializer.instance);
this.put(Long.class, ToStringSerializer.instance);
this.put(Long.TYPE, ToStringSerializer.instance);
if (CollectionUtil.isNotEmpty(dest)){
for (Entry<Type, ObjectSerializer> entry :dest.entrySet()){
this.put(entry.getKey(), entry.getValue());
}
}
}
private void handle(JSONSerializer serializer, ObjectSerializer itemSerializer, SerialContext context,
Object object, Object fieldName, Type elementType, Object item) throws IOException {
serializer.println();
if (item != null) {
itemSerializer = serializer.getObjectWriter(item.getClass());
SerialContext itemContext = new SerialContext(context, object, fieldName, 0, 0);
serializer.setContext(itemContext);
itemSerializer.write(serializer, item, fieldName, elementType, 0);
}
else {
serializer.getWriter().writeNull();
}
}
public ObjectSerializer createJavaBeanSerializer(Class<?> clazz) {
if (!Modifier.isPublic(clazz.getModifiers())) {
MyJavaBeanSerializer bean = new MyJavaBeanSerializer(clazz);
return bean;
}
return new MyJavaBeanSerializer(clazz);
}
@Override
public ObjectSerializer getObjectWriter(Class<?> clazz) {
ObjectSerializer writer = get(clazz);
if (writer == null) {
for (java.util.Map.Entry<Class<?>, ObjectSerializer> assignableSerializerEntry : assignableSerializerMap
.entrySet()) {
if (assignableSerializerEntry.getKey().isAssignableFrom(clazz)) {
put(clazz, assignableSerializerEntry.getValue());
}
}
}
return super.getObjectWriter(clazz);
}
@AnnotatedClassFinder(Serializer.class)
public void foundSerializer(Class<?> targetType) {
Serializer serializerAnno = targetType.getAnnotation(Serializer.class);
Class<? extends ObjectSerializer> serializerType = serializerAnno.value();
ObjectSerializer serializer = app.getInstance(serializerType);
handleForSerializer(serializer, targetType);
}
public static SerializeConfig put(Class<?> clazz, ObjectSerializer serializer) {
mapping.put(clazz, serializer);
return mapping;
}
public void addJsonConfig(Type type, ObjectSerializer serializer, ObjectDeserializer deserializer) {
addJsonSerializer(type, serializer);
addJsonDeserializer(type, deserializer);
}
public void addJsonSerializer(Type type, ObjectSerializer serializer) {
Jsoner.addSerializer(type, serializer);
}
public RuntimeSerializerInfo(ObjectSerializer fieldSerializer, Class<?> runtimeFieldClass){
super();
this.fieldSerializer = fieldSerializer;
this.runtimeFieldClass = runtimeFieldClass;
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
if (out.isEnabled(SerializerFeature.WriteNullListAsEmpty)) {
out.write("[]");
}
else {
out.writeNull();
}
return;
}
Type elementType = null;
if (serializer.isEnabled(SerializerFeature.WriteClassName)) {
if (fieldType instanceof ParameterizedType) {
ParameterizedType param = (ParameterizedType) fieldType;
elementType = param.getActualTypeArguments()[0];
}
}
Collection<?> collection = (Collection<?>) object;
SerialContext context = serializer.getContext();
serializer.setContext(context, object, fieldName, 0);
if (serializer.isEnabled(SerializerFeature.WriteClassName)) {
if (HashSet.class == collection.getClass()) {
out.append("Set");
}
else if (TreeSet.class == collection.getClass()) {
out.append("TreeSet");
}
}
try {
int i = 0;
out.append('[');
for (Object item : collection) {
if (i++ != 0) {
out.append(',');
}
if (item == null) {
out.writeNull();
continue;
}
Class<?> clazz = item.getClass();
if (clazz == Integer.class) {
out.writeInt(((Integer) item).intValue());
continue;
}
if (clazz == Long.class) {
out.writeLong(((Long) item).longValue());
if (out.isEnabled(SerializerFeature.WriteClassName)) {
out.write('L');
}
continue;
}
ObjectSerializer itemSerializer = serializer.getObjectWriter(clazz);
itemSerializer.write(serializer, item, i - 1, elementType, 0);
}
out.append(']');
}
finally {
serializer.setContext(context);
}
}
public void putAssignableTo(Class<?> clazz, ObjectSerializer objectSerializer) {
assignableSerializerMap.put(clazz, objectSerializer);
}
private void handleForSerializer(ObjectSerializer serializer, Class[] targetTypes) {
for (Class type : targetTypes) {
handleForSerializer(serializer, type);
}
}