如何使用Retrofit2和Gson Converter防止序列化期间的转义

时间:2019-03-06 02:44:52

标签: android gson retrofit2

我迷失了思想,竭尽所能进行搜索并提出可能的解决方案。我已经尝试了大多数答案,这些答案可能与我要实现的目标有关,但还是没有运气。

为了阐明我的问题,我收到了API的回复

{
    "profileList": [
        {
          "id": "7mmfHGLc0MGtZeQNno/WFqDjlAPj26CS",
          "name": "Alexandria Victoria Maxene Kluber  van de Gr\\\"oot\""
         }
       ]
}

我想要实现的是获取“名称”字段值,而不会对该值进行转义。因为在我当前的设置中,反序列化过程后从响应中得到的是Alexandria Victoria Maxene Kluber van de Gr\"oot""

我让Retrofit处理API请求和响应,这就是我要得到的,我目前不希望由于特定原因而放弃我的处理程序,但我希望有人可以指出正确的方向。 这是我的Retrofit Builder代码:

Gson gson = new GsonBuilder()
                        .disableHtmlEscaping()
                        .create();
      m_builder = new Retrofit.Builder()
                  .baseUrl(url)
                  .addConverterFactory(GsonConverterFactory.create(gson));

谢谢。

1 个答案:

答案 0 :(得分:0)

您应该尝试在JsonPrimitive中使用POJO。参见以下示例:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonPrimitive;

import java.io.File;
import java.io.FileReader;
import java.util.List;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();

        System.out.println(gson.fromJson(new FileReader(jsonFile), Profiles.class));
    }
}

class Profiles {

    private List<Profile> profileList;

    // getters, setters, toString
}

class Profile {

    private String id;
    private JsonPrimitive name;

    // getters, setters, toString
}

上面的JSON有效负载打印示例:

Profiles{profileList=[Profile{id='7mmfHGLc0MGtZeQNno/WFqDjlAPj26CS', name='"Alexandria Victoria Maxene Kluber  van de Gr\\\"oot\""'}]}