下面列出了怎么用com.alibaba.fastjson.serializer.SerialContext的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public boolean writeReference(JSONSerializer serializer, Object object,
int fieldFeatures) {
SerialContext context = serializer.getContext();
{
if (context != null
&& SerializerFeature.isEnabled(context.getFeatures(),
fieldFeatures,
SerializerFeature.DisableCircularReferenceDetect)) {
return false;
}
}
if (!serializer.containsReference(object)) {
return false;
}
SerialContext parentCtx = context;
while ((parentCtx = parentCtx.getParent()) != null) {
Object parentObj = parentCtx.getObject();
if (object.equals(parentObj)) {
serializer.writeNull();
return true;
}
}
return false;
}
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 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);
}
}