2016-03-03 1 views
6

J'utilise Microsoft.Net avec Breeze pour les API et les résultats obtenus avec Retrofit ont imbriqué les mêmes objets. Par exemple EmployeeJob a la propriété de navigation client de sorte que les API résultat se présente comme suit

{ 
    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 
    }, 
} 

Maintenant Java List-je obtenir de ces EmployeeJobs n'a que Customer dans le premier enregistrement et d'autres ont rien. Comment puis-je mapper le $ref:"2" à sa valeur d'origine au lieu de $ref.

Je ne veux pas que mes API de serveur pour envoyer les objets complets pour des raisons de réseau et de performance, c'est pourquoi je veux désérialiser ces $refs sur le côté client comme Angularjs $resource service fait pour nous.

+0

Avez-vous trouvé une réponse à cette question par hasard? – Lunchbox

+0

Je le fais manuellement affichant dans une réponse pour vous. – ahmadalibaloch

Répondre

0

Actuellement, j'ai travaillé arround manuellement pour la solution de ref $ comme celui-ci

//========== $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); 
      } 

Maintenant empJobs a les refs $ remplacés par leurs clients correspondants.