fastjson android.net.Uri无法转成json字符串

1cklez4t  于 4个月前  发布在  Android
关注(0)|答案(2)|浏览(103)
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呢?

tpxzln5u

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处理。

sc4hvdpw

sc4hvdpw2#

将会在下一个版本中支持

相关问题