C# LINQ、自定义对象、序列化和对象引用

C# LINQ、自定义对象、序列化和对象引用,c#,xml-serialization,C#,Xml Serialization,我目前正在使用LINQtoSQL进行数据检索,然后用LINQ查询填充我的自定义对象。我的自定义对象继承自在datacontract中使用IsReference=true属性的基类。然后将对象层次结构序列化为XML,然后将其发送到服务 这是可行的,但是XML中发生的事情是,对象数据在整个文件中对对象重复。在XML文件中,我想要的是,如果一个对象与另一个相同类型的对象具有相同的数据(无论它在对象树中的位置如何),我希望它具有对第一个对象的引用,而不是重复数据 我需要一些对象跟踪,但不确定它是否可以在

我目前正在使用LINQtoSQL进行数据检索,然后用LINQ查询填充我的自定义对象。我的自定义对象继承自在datacontract中使用IsReference=true属性的基类。然后将对象层次结构序列化为XML,然后将其发送到服务

这是可行的,但是XML中发生的事情是,对象数据在整个文件中对对象重复。在XML文件中,我想要的是,如果一个对象与另一个相同类型的对象具有相同的数据(无论它在对象树中的位置如何),我希望它具有对第一个对象的引用,而不是重复数据

我需要一些对象跟踪,但不确定它是否可以在LINQDataContext级别处理,或者因为我正在实例化我自己的自定义对象,是否应该在该级别使用类似于每个对象类型的哈希表的东西来跟踪它

我的课程是这样的:

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;
  }
}
稍后在我的程序中,我将创建另一个与另一个类中的方法相同类型的项的列表,我希望某些结果与第一次调用中的结果相同:

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;
  }
}
这样做可以成功地填充我的所有对象,然后序列化这些对象。关于如何在XML文件中引用重复的对象,有什么想法吗


谢谢你的意见。

我想我会更新这个,因为我已经找到了一个可行的解决方案

由于我的自定义对象与我的DataContext是分开的,不受它跟踪,所以我继续为我的对象创建了一个查找表,并在实例化新对象之前检查该表

这为我提供了我想要的XML文件中的引用