将List <mydto>转换为List <map <string,string>&gt;使用Gson

时间:2017-06-08 08:04:50

标签: java gson

我有DTO如下:

     public class MyDTO {
           private String MEValueName;
           private String MyId;

          // getters and setters

     }

     Gson gson = new Gson();
     List<MyDTO> list = new ArrayList<MyDTO>();
     MyDTO dto = new MyDTO();

     dto.setMEValueName("raghu");
     dto.setMyId("qwer");

     MyDTO dto1 = new MyDTO();

     dto1.setMEValueName("raghuveer");
     dto1.setMyId("qwer1");

     list.add(dto);
     list.add(dto1);

     String json = gson.toJson(list);
     System.out.println(json);

     // below line is failing
     List<Map<String, String>> list1 = gson.fromJson(json, new TypeToken<List<Map<String, String>>>(){}.getType()); 
     System.out.println(list1);

当我运行时,我得到以下错误:

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 11 path $[0].

此外,我想使用泛型类型,以便我也可以使用其他DTO转换为地图列表。请建议。

1 个答案:

答案 0 :(得分:0)

我看到两个眼前的问题...... json-string是List&lt; MyDTO&gt;类型的对象。 gson.fromJson必须具有相同对象类型的TypeToken。 即使fromJson工作,你也无法分配List&lt; MyDTO&gt;到List&lt; Map&lt; String,String&gt;&gt;。

类型的列表

编辑(通过内存执行此操作,因此可能需要进行一些微调以进行编译):

<build>
    <plugins>
      <plugin>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.4</version>
        <configuration>
        </configuration>
        <executions>
          <execution>
            <id>default-descriptor</id>
            <goals>
              <goal>descriptor</goal>
            </goals>
            <phase>process-classes</phase>
          </execution>
          <execution>
            <id>help-descriptor</id>
            <goals>
              <goal>helpmojo</goal>
            </goals>
            <phase>process-classes</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>