Gson对象序列化和反序列化

2019-04-27 12:34|来源: 网路

我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个Student类。 然后将对象列化后存储在student.json文件中,该文件将具有Student对象的json表示形式。

示例

在中创建一个名为GsonTester的Java类文件,参考以下代码 -

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException;  

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

public class GsonTester { 
   public static void main(String args[]) { 
      GsonTester tester = new GsonTester(); 
      try { 
         Student student = new Student(); 
         student.setAge(10); 
         student.setName("Mahesh"); 
         tester.writeJSON(student);  
         Student student1 = tester.readJSON(); 
         System.out.println(student1); 
      } 
      catch(FileNotFoundException e) { 
         e.printStackTrace(); 
      } 
      catch(IOException e) { 
         e.printStackTrace();
      } 
   } 
   private void writeJSON(Student student) throws IOException { 
      GsonBuilder builder = new GsonBuilder(); 
      Gson gson = builder.create(); 
      FileWriter writer = new FileWriter("student.json");   
      writer.write(gson.toJson(student));   
      writer.close(); 
   }  
   private Student readJSON() throws FileNotFoundException { 
      GsonBuilder builder = new GsonBuilder(); 
      Gson gson = builder.create(); 
      BufferedReader bufferedReader = new BufferedReader(
         new FileReader("student.json"));   

      Student student = gson.fromJson(bufferedReader, Student.class); 
      return student; 
   } 
} 
class Student { 
   private String name; 
   private int age; 
   public Student(){} 

   public String getName() { 
      return name; 
   } 
   public void setName(String name) { 
      this.name = name; 
   } 
   public int getAge() { 
      return age; 
   } 
   public void setAge(int age) { 
      this.age = age; 
   } 
   public String toString() { 
      return "Student [ name: "+name+", age: "+ age+ " ]";
   }  
}

执行上面示例代码,得到以下结果 -

Student [ name: Mahesh, age: 10 ]

相关问答

更多

将参数发送到具有0个参数的函数时的行为不一致(Inconsistent behavior when sending parameters to a function with 0 parameters)

从6.5.2.2函数调用 : 2 - 如果表示被调用函数的表达式具有包含原型的类型,则参数数量应与参数数量一致。 [...] VC是故意允许的,以便允许编译(为了兼容)错误的代码。 标准允许这样做,因为只要还发出诊断,就允许在遇到某些类型的错误代码时执行此操作。 From 6.5.2.2 Function calls: 2 - If the expression that denotes the called function has a type that includes a prototy

将ShowS转换为String的最佳方法?(Best way to convert ShowS to String?)

您无法show $ displayS blah因为ShowS不是Show的实例。 回想起那个 type ShowS = String -> String 所以,如果我们想要一个Show的实例,我们必须写: instance Show (String -> String) where show f = ... 现在我们遇到了一些问题。 毕竟,我们唯一能用函数f做的事情就是用String参数调用它。 有几种选择可以随时考虑,但它们各有缺点: 尝试在每个可能的输入上描述f的行为。 这不会很

SQL查询获取匹配的记录否则为NULL记录(SQL query to get either matched records otherwise NULL records)

您可以尝试以下查询: SELECT * FROM @TblA WHERE @ColA=ColA AND EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) UNION SELECT * FROM @TblA WHERE ColA IS NULL AND NOT EXISTS (SELECT 1 FROM @TblA WHERE @ColA=ColA) 这相当于 IF EXISTS(SELECT 1 FROM @TblA WHERE @ColA=Co

xpath与兄弟姐妹和位置有多个标准(xpath with multiple criterias over siblings and position)

我想提取名为='Category'和value ='bb'的子数据的值,其后跟兄弟名称='WayPointNumber'。 我认为你这太复杂了。 使用以下路径表达式: /root/ExtendedData/Data[@name = 'Category' and value = 'bb' and following-sibling::Data[@name = 'WayPointNumber']] 评估XPath表达式,例如在bash shell中使用xpath命令: $ xpath a.xml

如何绑定到Infragistics WPF TabItemEx的close事件?(How to bind to the close event of the Infragistics WPF TabItemEx?)

这可能是因为运行Closing事件的对象的DataContext是您的TabItem类,而不是包含TabCloseCommand的类 使用ElementName或RelativeSource首先设置命令绑定到TabControl.DataContext的Source ,它应该工作 <i:InvokeCommandAction Command="{Binding ElementName=xamTabControl1,

相关文章

更多

最近更新

更多