comment ne pas retourner la valeur null lorsque un membre de Données de champ n'est pas défini dans le contrat de données

J'ai un problème étrange avec mon WCF service qui renvoie des données dans JSON format.
Je veux retourner des informations à propos d'un "Client", basé sur la requête envoyée par le client.

Client peut demander quels sont les domaines de l'information au sujet d'un client dont ils ont besoin et les besoins du service pour envoyer uniquement des informations concernant le client.

Par Exemple: Si le client demande une liste de clients et dit qu'ils veulent firstname, lastname, ville
de chaque client, le serveur doit envoyer une réponse json avec chaque nom de champ et la valeur correspondante

Quelque chose comme...

[
  {"firstname":"john","lastname":"Goodman","city" :"NY"},
  {"firstname":"brad","lastname":"newman","city" :"LA"}
]

si le client demande la liste des clients avec l'ID et la ville pour que la réponse devrait ressembler à ceci

[
  {"id" :"1234","city" :"NY"},
  {"id":"1235","city" :"LA"}
]

Ma conception initiale était de mettre en œuvre un "Client" de la classe et ensuite chaque "champ"
comme un champ de cette classe. Puis à l'intérieur de ma méthode de service, j'ai été faire la liste de champs spécifiés par le client et instanciation d'objets de client uniquement avec les propriétés d'ensemble.

Mon contrat d'opération ressemble à ceci

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Customers?fields={value}")]
List<Customer> GetCustomers(string value);

Mais le problème est quand j'ai décorer la classe avec "DataContract" et chaque Champ comme "DataMember"....si certaines propriétés ne sont pas ensemble, ils ont encore de désérialisé NULLE lorsqu'il est envoyé au client. Je ne veux pas que cela se produise.

Aussi, la liste des champs possibles d'un client est très longue, et si la classe est devenu très grand. Je serais plutôt de les stocker ces champs comme un enum collection dans mon service plutôt que des champs d'une classe.

J'ai alors pensé après mon Opération de retour d'un IDictionary<string,object> puis ajoutez chaque champ et de la valeur de manière itérative pour cette collection. Qui n'a pas fonctionné parce que, quand un dictionnaire est sérialisé il montre {"Key:dfas", "Value:34"} etc etc. pas ce que je veux

Donc je suis un peu coincé. Quelle est la meilleure façon de résoudre ce problème?

Puis-je marque mon [DataContract] telle manière que si [DataMember] propriétés ne sont pas définies j'.e, null alors ils ne devraient pas être sérialisé et l'envoyer au client?

InformationsquelleAutor user330612 | 2011-04-16