java - 改造 JSON 反序列化对象的 $ref 对其原始副本的引用

标签 java android json retrofit retrofit2

我将 Microsoft.Net 与 Breeze 用于 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
    },
}

现在,我从这些 EmployeeJobs 中得到的 Java List 在第一条记录中只有 Customer,其他什么都没有。我怎样才能将 $ref:"2" 映射到它的原始值而不是这个 $ref

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

最佳答案

目前我已经手动解决了这样的 $ref 解决方案

//========== $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 替换为其相应的客户。

关于java - 改造 JSON 反序列化对象的 $ref 对其原始副本的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35771483/

相关文章:

java - 将请求从服务器发送到 Web 应用程序

java - 如何获取 TranslateAnimation 中的位置?

json - Flutter Dart http Type Response不是字符串错误的子类型

用于字符串的内部 API 的 Pythonic 方法

java - 如何仅使用 while 和 if-else 循环转换为十六进制

java - Android - 如何更大地显示我的启动屏幕图形?

android:如何将节页脚添加到列表

android - 接收联系人更改(添加、删除和更改)

Android:抽屉导航子菜单:如何折叠导航项

javascript - json数据未分配给输入框