2

我需要制作以下json:

[ { "contentType": "folder" },
  { "contentType": "image" },
  { "contentType": "video" }
]

在这样的数组中解析:

FileStructureElement [] elements[];

有:

public class FileStructureElement {
    private ElementType contentType;
}

public enum ElementType {
    FOLDER, IMAGE, VIDEO, DEFAULT;
}

这是一个简化的例子,FileStructureElement类有更多的属性,与问题字段无关。

我想将contentType属性的值加载为ElementType. 我不能让枚举的值与 json 的类型匹配,因为 json 中的可能值之一是“默认”,它不是有效的枚举值。此外,我不想使用小写名称的枚举值。这基本上意味着我需要自定义 GSON 解析。有人可以帮我吗?

从这里开始的想法(检查我解析的属性的值并选择是否加载枚举值)对我没有帮助,因为我无法控制我与之交谈的 Web 服务接口并且这些值太明显了我冒着它们也将作为其他一些 json 属性的值出现的风险。

4

1 回答 1

4

如果要对枚举进行自定义解析,则需要注册一个适配器

JsonDeserializer<?> jd = new JsonDeserializer<ElementType>() {
  @Override
  public ElementType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    String enumStr = json.getAsString();
    ElementType val = 
    //...

    return val;
  }
};

Gson gson = new GsonBuilder().registerTypeAdapter(ElementType.class, jd).create();

只需为提供的字符串返回正确的枚举值。

于 2013-07-19T13:06:09.063 回答