Uri uri = Uri.parse("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"); String str = JSON.toJSONString(uri);
这段代码一直卡死没有返回json字符串。尝试过gson也是同样的情况,想知道是不是andrdoi.net.Uri这个类的对象都无法转成json呢?
tpxzln5u1#
有另外的新发现我上面的代码是可以的。但是把https改成file就不可以了。如下:
Uri uri = Uri.parse("file://haha"); String str = JSON.toJSONString(uri);
主要因为出现了死循环。因为在在类android.net.Uri中的getCanonicalUri方法
public Uri getCanonicalUri() { if ("file".equals(getScheme())) { ... return Uri.fromFile(new File(canonicalPath)); } else { return this; } }
这会无限生成Uri的子类并且不停解析Uri,以致出现死循环于com.alibaba.fastjson.serializer.FieldSerializer,第137行。
if (valueClass == runtimeInfo.runtimeFieldClass) { runtimeInfo.fieldSerializer.write(serializer, propertyValue, fieldInfo.name, fieldInfo.fieldType); return; }
处理这种方法可以把canonicalUri当作字段使用SimplePropertyPreFilter过滤之。不知作者有无其他更好的做法。毕竟这种死循环不能使用SerializerFeature.DisableCheckSpecialChar处理。
sc4hvdpw2#
将会在下一个版本中支持
2条答案
按热度按时间tpxzln5u1#
有另外的新发现
我上面的代码是可以的。但是把https改成file就不可以了。如下:
主要因为出现了死循环。因为在在类android.net.Uri中的getCanonicalUri方法
这会无限生成Uri的子类并且不停解析Uri,以致出现死循环于com.alibaba.fastjson.serializer.FieldSerializer,第137行。
处理这种方法可以把canonicalUri当作字段使用SimplePropertyPreFilter过滤之。不知作者有无其他更好的做法。毕竟这种死循环不能使用SerializerFeature.DisableCheckSpecialChar处理。
sc4hvdpw2#
将会在下一个版本中支持