来自Json和toJson的Gson用于在Java中返回null的简单对象

时间:2014-12-25 00:55:12

标签: java object serialization gson

问候我是新来的和Java,非常感谢您的建议。我正在使用gson-2.3.1,当我调用toJson或fromJson时,我意外地返回null。我在一个更复杂的对象上尝试这个,所以我在这里使用用户指南https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples回到了基础。下面的代码几乎完全被复制,编译但是对于我来回返回案件中的null都没有用。只有字符串文字的情况才有效。建议非常感谢,谢谢!

    //an object
    class BagOfPrimitives {
        private int value1 = 1;
        private String value2 = "abc";
        private transient int value3 = 3;
        BagOfPrimitives() {
            // no-args constructor
        }
    }

    // (Serialization)
    BagOfPrimitives obj = new BagOfPrimitives();
    Gson expgson2 = new Gson();
    String json = expgson2.toJson(obj);
    // here json in null - expected was the string below
    String expectedjson = "{\"value1\":1,\"value2\":\"abc\"}";

    // (Deserialization)
    BagOfPrimitives obj2 = expgson2.fromJson(expectedjson, BagOfPrimitives.class);
    // result is obj2 is null and not the object expected

2 个答案:

答案 0 :(得分:3)

我发现了问题。上面的所有代码都在一个方法中,所以我在一个类中声明了BagofPrimitives类,编译器允许这样做,所以我认为它没问题。记住我是Java新手,还在学习。一旦我将BagofPrimitives移到它所属的位置,代码工作正常。

答案 1 :(得分:0)

虽然Ocean的上述答案是正确的,但我只想说问题出在文档上。看guideBagOfPrimitives的内部类似乎完全没问题,实际上它甚至都不受支持。完整工作和非工作代码如下。请注意,两者都编译没有错误。

作品

package com.mypackage;
import com.google.gson.Gson;

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;

  BagOfPrimitives() {
  }
}

public class Trials {

  public static void main(String[] args) {
    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    System.out.println(json);
  }
}

输出

{"value1":1,"value2":"abc"}

不起作用:

package com.mypackage;
import com.google.gson.Gson;

public class Trials {

  public static void main(String[] args) {

    class BagOfPrimitives {

      private int value1 = 1;
      private String value2 = "abc";
      private transient int value3 = 3;

      BagOfPrimitives() {
      }
    }

    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    System.out.println(json);
  }
}

输出

null