Bonjour @ tous,

Je fait des échanges en API Restfull via Json, et ca fonctionne bien.
j'ai un cas de figure un peu tordu, je sais y répondre, mais j'aimerais échanger pour voir si il n'existe pas une méthode plus standard.

J'ai un objet "Projet" qui a des relation N/N avec "articles" (qui a un id, un nom et une quantité), on va dire.
Pour le POST l'API me demande ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
{  "id":2, "name": "toto", ...
  "articles": [
    { "id": 1, "length": 32 },
    { "id": 3, "length": 20 }
  ]
}
Aucun souci, c'est un tableau d'objets standards.
Par contre, pour le GET, l'API me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{ "id":2, "name": "toto", ...
  "articles": [{
	"projectId": 2,
	"articleId": 4,
	"article": { "id": 4, "name": "Bonbon" },
	"length": 20
  },
  {
	"projectId": 2,
	"articleId": 5,
	"article": { "id": 5, "name": "Voiture" },
	"length": 25
  }]
}
Et là, l'automatisme de DataContractJsonSerializer() est désarmé, même avec un IDataContractSurrogate.

Ma façon de faire est de rajouter une propriété "article" dans mon objet "article" (avec l'attribut "DataMember", bien sur).
Et lors du OnDeserialized() du projet, je copie les valeur de la propriété "article" dans les propriétés de ce même objet ad hoc.
Ça fonctionne, mais je ne trouve pas ça très générique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
        [OnDeserialized()]
        internal void OnDeserializedMethod(StreamingContext context) {
            foreach (var item in articles) {
                if (item.article!=null) {
                    item.id = item.article.id;
                    item.name = item.article.name;
                }
            }
        }
Qu'en pensez vous ?

Merci d'avance de vos lumières.