Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 改进JSON反序列化对象';s$ref参考其原始副本_Java_Android_Json_Retrofit_Retrofit2 - Fatal编程技术网

Java 改进JSON反序列化对象';s$ref参考其原始副本

Java 改进JSON反序列化对象';s$ref参考其原始副本,java,android,json,retrofit,retrofit2,Java,Android,Json,Retrofit,Retrofit2,我正在使用Microsoft.Net和Breeze for API,使用改型得到的结果嵌套了重复的相同对象。例如,EmployeeJob具有客户导航属性,因此API结果如下所示 { Id:1, "Customer_Id": 39, "Customer": { "$id": "2", "$type": "Wit.Trade.Entities.Customer, Wit.Trade", "CourtesyTitle": "Mr",

我正在使用Microsoft.Net和Breeze for API,使用改型得到的结果嵌套了重复的相同对象。例如,EmployeeJob具有客户导航属性,因此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
    },
}
//========== $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);
            }
现在,Java
列表
我得到的这些
EmployeeJobs
在第一条记录中只有
Customer
,而其他记录中没有。如何将
$ref:“2”
映射到其原始值而不是此
$ref


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

目前我已经在附近手动为$ref解决方案工作过了

 {
   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
    },
}
//========== $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);
            }
/=============$ref针对员工工作客户的手动解决方案
List completedCustomers=new ArrayList();
for(EmployeeJob empJob:empJobs){
if(empJob.Customer!=null&&empJob.Customer.Id==null&&empJob.Customer.$ref!=null){
对于(客户群:已完成的客户){
if(comCus.$id.equalsIgnoreCase(empJob.Customer.$ref))
empJob.Customer=comCus;
}
}否则
completedCustomers.add(empJob.Customer);
}

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

您是否找到了这个问题的答案?我正在手动为您发布答案。Jesse Wilson对您的问题的反应是建议为Gson编写一个类似GraphAdapterBuilder的适配器。你没做到吗?我无法证实这是否像他所说的那样“直截了当”。我只是部分理解,这还不够。