相关疑难解决方法(0)

.net XML序列化 - 存储引用而不是对象复制

  • 在.Net/C#Application中,我有相互引用的数据结构.
  • 当我序列化它们时,.Net使用单独的对象副本序列化所有引用.
  • 在下面的示例中,我正在尝试序列化为'Person'数组
  • "人"可能会引用另一个人.

    public class Person
    {
        public string Name;
        public Person Friend;
    }
    
    Person p1 = new Person();
    p1.Name = "John";
    
    Person p2 = new Person();
    p2.Name = "Mike";
    
    p1.Friend = p2;
    
    Person[] group = new Person[] { p1, p2 };
    XmlSerializer ser = new XmlSerializer(typeof(Person[]));
    using (TextWriter tw = new StreamWriter("test.xml"))
        ser.Serialize(tw,group );
    
    //above code generates following xml
    
    <ArrayOfPerson>
      <Person>
        <Name>John</Name>
        <Friend>
          <Name>Mike</Name>
        </Friend>
      </Person>
      <Person>
        <Name>Mike</Name>
      </Person>
    </ArrayOfPerson>
    
    Run Code Online (Sandbox Code Playgroud)
  • 在上面的代码中,同一个'Mike'对象存在于两个地方,因为对同一个对象有两个引用.

  • 在反序列化时,它们变成两个不同的对象,它们在序列化时不是精确的状态.
  • 我想避免这种情况,只有序列化xml中的对象副本,所有引用都应引用此副本.反序列化后,我想回来,相同的旧数据结构.
  • 可能吗 ?

.net c# xml xml-serialization

34
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

xml ×1

xml-serialization ×1