Ser*_*sky 36 java serialization json gson
看起来像Gson.toJson(Object object)生成带有对象随机扩展字段的JSON代码.有办法以某种方式修复字段顺序吗?
public class Foo {
public String bar;
public String baz;
public Foo( String bar, String baz ) {
this.bar = bar;
this.baz = baz;
}
}
Gson gson = new Gson();
String jsonRequest = gson.toJson(new Foo("bar","baz"));
// jsonRequest now can be { "bar":"bar", "baz":"baz" } (which is correct)
// and can be { "baz":"baz", "bar":"bar" } (which is a wrong sequence)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Bal*_*usC 28
您需要创建自定义JSON序列化程序.
例如
public class FooJsonSerializer implements JsonSerializer<Foo> {
@Override
public JsonElement serialize(Foo foo, Type type, JsonSerializationContext context) {
JsonObject object = new JsonObject();
object.add("bar", context.serialize(foo.getBar());
object.add("baz", context.serialize(foo.getBaz());
// ...
return object;
}
}
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用:
Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, new FooJsonSerializer()).create();
String json = gson.toJson(foo);
// ...
Run Code Online (Sandbox Code Playgroud)
这样可以保持序列化程序中指定的顺序.
实际上 Gson.toJson(Object object) 不会以随机顺序生成字段。结果 json 的顺序取决于字段名称的字面顺序。
我遇到了同样的问题,它是通过类中属性名称的字面顺序解决的。
问题中的示例将始终返回以下 jsonRequest:
{ "bar":"bar", "baz":"baz" }
为了有一个特定的顺序,你应该修改字段的名称,例如:如果你想排baz在第一位,那么来bar:
public class Foo {
public String f1_baz;
public String f2_bar;
public Foo ( String f1_baz, String f2_bar ) {
this.f1_baz = f1_baz;
this.f2_bar = f2_bar;
}
}
Run Code Online (Sandbox Code Playgroud)
jsonRequest 将是 { "f1_baz ":"baz", "f2_bar":"bar" }
| 归档时间: |
|
| 查看次数: |
23559 次 |
| 最近记录: |