我尝试使用 google.gson.GsonBuilder 序列化对象,如下所示:

public class JsonHelper
{
    public static String ToJson(Object o, Type oType)
    {
        Gson gson = new().setPrettyPrinting().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
        gson.toJson(o, oType);
    }
}

public class JsonTest
{
   public static String staticField;

   public static String ToJson()
   {
       JsonTest newJsonTest = new JsonTest();
       newJsonTest.staticField = TelephoneStatus.GetPhoneIMEI(); // let's say we use static field to keep IMEI

       Type oType = new TypeToken<JsonTest>(){}.getType();
       return JsonHelper.ToJson(newJsonTest, oType);
   }
}
JsonTest类方法ToJson()的返回值为空。如果我将staticField字段声明更改为非静态,则它将按预期工作。考虑到为什么静态字段未序列化,应该将其视为错误吗?还是认为它是不必要的?

如果我有一个JsonTest列表,我不会期望静态字段被解析和写入多次,而是一次。但是,难道不是比完全错过它更好吗?

最佳答案

Java序列化仅序列化对象的非静态和非 transient 字段,因为,



Reference

在静态字段状态的情况下,它不仅属于任何特定对象,还将属于所有类。

因此,静态字段将处于任何特定对象的状态下。

10-06 02:16