2009-01-08 11 views
0

J'essaie de trouver le moyen le plus efficace d'envoyer mes objets Linq2Sql à mes plugins jQuery via JSON, de préférence sans code supplémentaire pour chaque classe. Les EntitySets sont le problème principal car ils provoquent non seulement la récursivité, mais quand la récursivité est ignorée (en utilisant la fonction ReferenceLoopHandling de JSON.NET) une quantité stupide de données peut être récupérée, quand j'ai seulement vraiment besoin de 1 ou 2 niveaux. Cela devient vraiment grave lorsque vous parlez des utilisateurs, des rôles et des autorisations lorsque vous obtenez le rôle de l'utilisateur, les autorisations de l'utilisateur, les autorisations du rôle et les utilisateurs du rôle dans votre JSON avant qu'il ne récursive et s'arrête. Comparez cela à ce que je veux réellement, qui est juste le RoleId. Mon approche initiale consistait à envoyer une version "simplifiée" de l'objet, où je reflétais l'entité et définissais n'importe quel EntitySets à zéro, mais bien sûr dans l'exemple ci-dessus Roles est défini sur null et RoleId est null. Ne définissant que les propriétés de 2ème niveau à un type de travail nul, mais il y a encore trop de données car les EntitySets qui n'ont pas été détruits (les premiers) repeuplent leurs tables associées quand JsonSerializer fait sa réflexion et j'obtiens toujours tous ces objets Permission Je n'ai juste pas besoin. Je ne veux certainement pas entrer dans la situation de créer une version allégée de chaque classe et de mettre en œuvre des méthodes de style "De" et "A", car cela demande beaucoup de travail et semble inutile.Création d'objets proxy Linq2Sql légers

Une autre option consiste à mettre un JsonIgnoreAttribute sur les propriétés concernées, mais cela va provoquer un scénario de cauchemar chaque fois que des classes doivent être régénérées.

Ma solution préférée actuelle que j'aime et que je déteste en même temps est de mettre les classes en mode de sérialisation opt-in, mais parce que je ne peux pas ajouter d'attributs aux propriétés réelles que je devrais créer JSON seulement propriétés dans une classe partielle. Encore une fois, cela semble inutile, mais je pense que c'est le meilleur jusqu'à présent.

Toutes les suggestions reçues avec gratitude!

Répondre

0

Avez-vous essayé de définir le mode de sérialisation dans le fichier dbml?

C'est une propriété standard sous la génération de code et lorsque vous le définissez sur Unidirectionnel, il ne générera pas tous les niveaux supplémentaires de votre structure de table. Je l'ai utilisé avec Silverlight et WCF pour envoyer des données parce que les contrats de données ne permettent pas d'envoyer des niveaux supplémentaires (Silverlight est très limité sur ce que vous pouvez et ne pouvez pas faire).

Espérons que cela aide!