2009-07-10 5 views
2

J'utilise actuellement LINQ to SQL pour la récupération de données, puis le remplissage de mes objets personnalisés avec des requêtes LINQ. Mes objets personnalisés héritent d'une classe de base qui utilise l'attribut IsReference = true dans le contrat de données. Je prends alors ma hiérarchie d'objets et la sérialise en XML qui est ensuite envoyée à un service.LINQ, objets personnalisés, sérialisation et références d'objet

Cela fonctionne cependant ce qui se passe dans le XML est que les données d'objet sont répétées pour les objets dans le fichier. Ce que je veux dans le fichier XML, c'est que si un objet a les mêmes données qu'un autre objet du même type (peu importe où il se trouve dans l'arbre des objets), j'aimerais qu'il fasse référence à ce premier objet et ne répète pas les données.

J'ai besoin d'un suivi d'objet et je ne sais pas s'il peut être géré au niveau LINQ DataContext ou depuis que j'instancie mes propres objets personnalisés si je dois le suivre à ce niveau en utilisant quelque chose comme une hashtable type.

Voici ce que mes classes ressemblent:

class Section1 { 
    public static MyClass GetClasses(int Id) 
    { 
    using (DataContext dataContext = new DataContext()) 
    { 
     var result = from items in dataContext.Table 
     where item.Id == Id 
     select items; 

     foreach (var entry in result) 
     { 
     MyClass myClass = new MyClass(); 
     myclass.Id = entry.Id; 
     } 
    } 
    return myclass; 
    } 
} 

Plus tard dans mon programme je crée une autre liste du même type d'éléments comme une méthode dans une autre classe et je me attends quelques-uns des résultats être le même que dans le premier appel:

Class2 { 
    public static MyClass GetItemClasses(int ItemId) 
    { 
    MyClass myClass = new MyClass(); 

    using (DataContext dataContext = new DataContext()) 
    { 
     var result = from items in dataContext.Table 
      where item.Id == ItemId 
      select items; 

     foreach (var entry in result) 
     { 
     MyClass myClass = new MyClass(); 
     myclass.Id = entry.Id; 
     } 
    } 
    return myclass; 
    } 
} 

Cela remplit avec succès tous mes objets que je sérialiser ensuite. Des idées sur la façon dont je peux avoir des références dans mon fichier XML pour les objets qui sont répétés?

Merci pour toute contribution.

Répondre

1

Je pensais que je mettrais à jour ceci car j'ai trouvé une solution réalisable. Comme mes objets personnalisés sont séparés de mon DataContext et ne sont pas suivis, je suis allé de l'avant et j'ai créé une table de recherche pour mes objets et je vérifie cette table avant d'instancier un nouvel objet.

Cela m'a fourni les références dans le fichier XML que je recherchais.

Questions connexes