【问题标题】:Xstream giving different resultsXstream 给出不同的结果
【发布时间】:2010-05-20 22:15:17
【问题描述】:

我们将 XStream 用于我们的宁静服务。但是,对于具有相同值的字段,Xstream 为我们提供了不同的结果。 假设它是 Book 对象:

public class Book {
 public String name "myName";
 public List <String> authors = new List <String> ();
 public String subject "mySubject";

 public Book() {}
}

这个的json是:

{
  "Book": {
    "name": "myName",
    "authors": "",
    "subject": ["mySubject"]
  }
}

但是,如果我将作者添加到集合中,我会得到不同的结果。

{
  "Book": {
    "name": "myName",
    "authors": ["author1", "author2", "author3"],
    "subject": "mySubject"
  }
}

有没有人遇到过这个问题并知道解决方案?

【问题讨论】:

    标签: java json xstream


    【解决方案1】:

    首先,您上面的 Book 实例包含错误。我认为它应该是这样的:

    public class Book{
        public String name = "myName";
        public List authors = new ArrayList();
        public String subject = "mySubject";
    
        public Book(){
        }
    }
    

    现在:

    {"Book":{"name":"myName", "authors":"", "subject":["mySubject"]}}
    

    您确定这是 xstream 为上面列出的 Book 对象返回的内容吗?这似乎不对,因为 subject 属性是 String 而不是 String[] 或其他类型的集合。您给出的第一个示例(没有作者的书)的 JSON 编码应该是:

    {"Book":{"name":"myName", "authors":"", "subject":"mySubject"}}
    

    除非你的 Book 看起来像这样:

    public class Book{
        public String name = "myName";
        public List authors = new List();
        public String[] subject = {"mySubject"};
    
        public Book(){
        }
    }
    

    底线:确保您没有将主题声明为集合。

    作为奖励提示,请尝试在您的问题上发布工作代码。这样更容易获得有意义的答案。 所以我的猜测是你的 Book 类正在声明主题是某种集合

    【讨论】:

    • 抱歉pojo的错字。是的,我确信主题是一个简单的字符串。实际上,真正的类有几个集合,同样的问题也会发生在其他字段组合上。这导致 UI Javascript 因管理这些疯狂结果的所有 if 语句而变得臃肿。
    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2015-08-21
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多