将JSON反序列化反序列化为其原始副本的$ ref引用

时间:2016-03-03 11:52:40

标签: java android json retrofit retrofit2

我正在使用Microsoft.Net和Breeze for API,我使用Retrofit得到的结果嵌套了重复的相同对象。例如,EmployeeJob具有Customer导航属性,因此API结果如下所示

 {
   Id:1,
   "Customer_Id": 39,
    "Customer": {
        "$id": "2",
        "$type": "Wit.Trade.Entities.Customer, Wit.Trade",
        "CourtesyTitle": "Mr",
        "FirstName": "Ahmad"
    }
}
{
  Id:2
  "Customer_Id": 39,
    "Customer": {
        "$ref": "2" //here same customer Ahmad
    },
}

现在,我得到的List这些EmployeeJobs在第一条记录中只有Customer,其他的则没有。如何将$ref:"2"映射到其原始值而不是此$ref

我不希望我的服务器API因网络和性能原因发送完整的对象,这就是为什么我想在客户端反序列化这些$refs,就像Angularjs $resource service为我们做的那样

1 个答案:

答案 0 :(得分:0)

目前我已经手动为这个$ ref解决方案工作了arround

//========== $ref manual solution for employee jobs' customers
            List<Customer> completedCustomers = new ArrayList<>();
            for (EmployeeJob empJob : empJobs) {
                if (empJob.Customer != null && empJob.Customer.Id == null && empJob .Customer.$ref != null) {
                    for (Customer comCus : completedCustomers) {
                        if (comCus.$id.equalsIgnoreCase(empJob.Customer.$ref))
                            empJob.Customer = comCus;
                    }
                } else
                    completedCustomers.add(empJob.Customer);
            }

现在empJobs已将$ refs替换为相应的客户。