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:
Aucun souci, c'est un tableau d'objets standards.
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 } ] }
Par contre, pour le GET, l'API me donne:
Et là, l'automatisme de DataContractJsonSerializer() est désarmé, même avec un IDataContractSurrogate.
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 }] }
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.
Qu'en pensez vous ?
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; } } }
Merci d'avance de vos lumières.
Partager